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);
}
我们可以把已经得到的数列中间项保存起来,如果下次需要计算的时候先查找一下,如果前面已经计算过就不再重复计算了。
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 + fibNminusTwo;
finNMinusTwo = finNMinusOne;
finNMinusOne = fibN;
}
return fibN;
}
3、相关题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解法:斐波那契数列的变相考查,总数f(n)=f(n-1)+f(n-2)。