- 方法1:直接递归
long long Fibonacci(unsigned i)
{
if(i<=0)
return 0;
if(i==1)
return 1;
return Fibonacci(i-1)+Fibonacci(i-2);
}
上述方法有很严重的效率问题。计算的节点数会随着i的增大而急剧增加,这意味着计算量会随着n的增大而急剧增大。此时,计算的时间复杂度是以n的指数的方式递增的。
- 方法2:从下往上计算,根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)…以此类推就可以算出第i项。
此时的时间复杂度为 O(N)
long long Fibonacci(unsigned index)
{
int result[2]={0,1};
if(i<2)
return result[imdex];
int first=0;
int second=1;
int fib=0;
for(unsigned i=2;i<=index;++i)
{
fib=first+second;
first=second;
second=fib;
}
return fib;
}