Я узнал, что memoization лучше подходит для игры с сериями Фибоначчи. Сегодня я написал программу таким образом -Без рекурсии, дающей ошибку памяти
private void printFibonacci(int lengthOfSeries) {
int lastNumb = 1;
int secondLastNumb = 1;
List<Integer> fabArray = new ArrayList<Integer>();
if (lengthOfSeries == 0) {
System.out.println("Please enter number to print series.");
} else {
fabArray.add(secondLastNumb);
fabArray.add(lastNumb);
while (fabArray.size() < lengthOfSeries) {
lastNumb = fabArray.get(fabArray.size() - 1);
secondLastNumb = fabArray.get(fabArray.size() - 2);
fabArray.add(lastNumb + secondLastNumb);
}
}
System.out.println(fabArray);
}
Это прекрасно работает. Но когда входной номер высок (скажем, 100 000 000), его бросание outOfMemoryerror
. И его ошибка бросания в строке, где печатает список.
Может кто-нибудь, пожалуйста, дайте какое-нибудь предложение сделать его мощным.
Возможно, у него закончилась память, потому что входной сигнал высок ...? –
вы запоминаете все значения, когда вам действительно нужны только последние 2. вы можете либо сохранить только эти 2, либо использовать круговой буфер размера 2. – njzk2
@CyberneticTwerkGuruOrc да, вы правы. Это я хочу диагностировать и исправить. – Arfeen