解题思路:一种是存储递归过程中已经计算过的值,另一种是通过递推关系式;
这是第二种方法:
F(n) = F(n-1) + F(n-2)
F(n-1) = F(n-2) + F(n-3)
...
F(4) = F(3) + F(2)
F(3) = F(2) + F(1)
F(2) = F(1) + F(0)
可以看出自底向上,每一次求解的两个值都包含在前一次的公式中,用代码写就相当于:
int t;
t = a;
a = a + b;
b = t;
每次只需要用一个临时变量保存第一个值,然后将其做为下一次迭代的第二个值就可以了。
int Fibonacci(int n){ if (n <= 0) return 0; else if(n == 1) return 1; int a = 1, b = 0; int tmp; while(n >= 2){ tmp = a; a = a + b; b = tmp; n--; } return a; }