用迭代而不用递归,递归实际操作计算时间过久,当计算到第四个的时候,计算为:
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0)
这样每次都要重新计算,时间耗费长,所以考虑用迭代
c++实现:
定义两个变量pre和prepre分别存放前两个数,fibonacci数,每个数为前两个数相加,将第0个和第1个数初始化,之后的每个fib都为前两个数相加,一边计算fib一边将pre和prepre后移存放新的两个数。
时间复杂度为O(n),空间复杂度为O(1).
class Solution {
public:
int Fibonacci(int n) {
int fib=0;
int pre=1;
int prepre=0;
if(n<=1)
return n;
for(int i=2;i<=n;i++){
fib=pre+prepre;
prepre=pre;
pre=fib;
}
return fib;
}
};