递归思路:
int fib(int n) {
if ( 2 > n) {
return n;
}
return fib(n-1) + fib(n-2);
}
展开递归计算过程,如下为求第fib(5)的递归过程。
如上发现好多重复计算过程,时间与空间的消耗也是必然的。
颠倒计算方向,由自顶而下递归,为自底而上迭代(动态规划)
算法描述为:
int fib(int n) {
int f = 0, g = 1;
while( --n > 0 ) {
g = g + f;
f = g - f;
}
return g;
}