У меня есть запомненная рекурсивная функция для вычисления чисел Фибоначчи.У меня есть контрольные примеры для этой функции.По сути, он отправляет позицию, и если в этой позиции уже есть число, просто верните его, а если его нет, рассчитайте его.Я прогнал свой код через отладчик и понял, что:
if (dictionary[position] != null){
result = dictionary[position];
}
никогда не срабатывает.Полный код ниже.Например, если у вас есть Calculate Fib (4), который будет запрашивать fib(3)
, который будет запрашивать fib(2)
, который будет запрашивать fib(1)
, который будет запрашивать fib(0)
, и когда стек начинает закрываться, значенияникогда не сохраняютсятак, например, fib(2)
или, скорее, dictionary(2)
всегда равен нулю.Его запутанная причина в отладчике, который показывает, что значения вычисляются, но когда стек начинает закрываться, они снова становятся нулевыми.Как мне сделать рефакторинг кода, чтобы строки всегда были хитами?
public BigInteger calculateFib(int position) {
final BigInteger[] dictionary = new BigInteger[100000];
BigInteger result = BigInteger.ONE;
if (position < 2) {
return result;
}
else {
if (dictionary[position] != null){
result = dictionary[position];
}
else {
result = calculateFib(position - 1).add(calculateFib(position - 2));
dictionary[position] = result;
}
return result