使用动态规划的第 n 个斐波那契数

nth fibonacci number using using dynamic programming

我能够理解给出的动态规划实现 HERE

但是我不清楚我正在复制粘贴的编码面试书破解中给出的另一个版本。有人能帮我理解一下吗,而且这不比上面的geeksforgeek动态编程实现贵吗。

int[] fib = new int[max];
int fibonacci(int i){
if(i == 0) return 0;
if(i == 1) return 1;
if (fib[i] != 0) return fid[i];
fib[i] = fibonacci(i-1) + fibonacci(i-2);
return fib[i];
}

基本上int[] fib是一个缓存,其中存储了第i个斐波那契数。

这非常节省时间。否则递归斐波那契程序将需要重新计算很多值。

例如

fib[8] = fibonacci(7) + fibonacci(6)

但是然后:

fib[7] = fibonacci(6) + fibonacci(5)

如您所见,如果没有缓存,fibonacci(6) 的值将需要计算两次。