斐波那契数列
写一个函数,输入n,求斐波那契数列的第n项。
递归:
long long Fibonacci(unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
但是递归太慢了,重复计算的地方太多。
我们从下往上算,根据f(0)和f(1)算出f(2),以此类推算到第n项。时间复杂度时O(n)。
long long Fibonacci(unsigned int n)
{
int result[2]={0,1};
if(n<2)
return result[n];
long long fibNMinusOne = 1;
long long fibNMinusTwo = 0;
long long fibN = 0;
for(unsigned int i=2;i<=0;i++)
{
fibN = fibNMinusTwo + fibNMinusTwo;
fibNMinusTwo = fibNMinusOne;
fibNMinusOne = fibN;
}
return fibN;
}