《剑指offer》面试题10:斐波那契数列

题目一:求斐波那契数列的第n项

写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下:
当n=0时,f(n)=0;
当n=1时,f(n)=1;
当n>1时,f(n)=f(n-1)+f(n-2);


从下往上计算,首先根据 f(0)和 f(1)算出 f(2),再根据 f(1)和 f(2)算出 f(3)……以此类推就可以算出第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 logn fibN=0;
	for(unsigned int i=2;i<=n;++i)
	{
		fibN=fibNMinusOne+fibNminusTwo;

		fibNminusTwo=fibNMinusOne;
		fibNMinusOne=fibN;
	}
	return fibN;
}

测试用例:
a.功能测试(如输入3、5、10等)。
b.边界值测试(如输入0、1、2)。
c.性能测试(输入较大的数字,如40、50、100等)。

类似题:青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。

猜你喜欢

转载自blog.csdn.net/qq_43502142/article/details/84644730