1. 程式人生 > >《劍指offer》面試題10:斐波那契數列

《劍指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級的臺階總共有多少種跳法。