题目:写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下:
n=0 f(n)=0
n=1 f(n)=1
n>1 f(n-1)+f(n-2)
很多教科书上面的解法:
long long Fibonacci(unsigned int n)
{
if (n<=0)
return 0;
if (n==1)
return 1;
if (n>1)
return Fibonacci(n-1)+Fibonacci(n-2);
}
下面我们使用循环的解法:
long long Fibonacci(unsigned int n)
{
int result[2]={0,1};
if(n<2)
return result[n];
long long FibOne=0;
long long FibTwo=1;
long long FibN=0;
for(unsigned int i=2;i<=n;i++)
{
FibN=FibOne+FibTwo;
FibOne=FibTwo;
FibTwo=FibN;
}
return FibN;
}
可以看到这种解法,是从下往上计算的,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)....依次类推算出第n项,时间复杂度为O(n)。