1、写一个函数,输入n,求斐波那契数列的第n项。
解法:用递归的方法求解会导致严重的效率问题。
long long Fib(unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fib(n-1) + Fib(n-2);
}
2、可以用树形结构来表示数列间的依赖关系,我们会发现树中的很多结点是重复的,而且重复的结点数会随着n的增大而急剧增加。事实上,用递归方法计算的时间复杂度是以n的指数的方式递增的。
我们可以把已经得到的数列中间项保存起来,如果下次需要计算的时候先查找一下,如果前面已经计算过就不再重复计算了。
long long Fib(unsigned 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<=n; ++i)
{
fibN = finNMinusOne + fib