【題目描述】
寫乙個函式,輸入n,求斐波那契數列的第n項。
【解決方案】
1. 遞迴,效率很低,挑剔的面試官不會喜歡。
因為遞迴的過程由於呼叫函式自身,函式呼叫是有時間和空間的消耗,每一次呼叫函式,都需要再記憶體棧中分配空間以儲存引數、返回位址及臨時變數,而且往棧裡壓入資料和彈出資料都是需要時間的,每個程序的棧容量是有限的,很可能會引起呼叫棧溢位。
另外,遞迴中有可能很多計算都是重複的,從而對效能帶來很大的負面影響。
2. 迭代(迴圈)。
我的**實現1,僅供參考:
1我的**實現2,僅供參考:///2
///遞迴實現
3///
4///
5///
6public
static
int fibonacci(intn)7
1213
if (n == 1)14
1718
return fibonacci(n - 1) + fibonacci(n - 2
);19 }
1【本題擴充套件】///2
///迭代實現
3///
4///
5///
6public
static
int fibonacci(intn)7
1213
if (n <= 2)14
1718
int first = 1;19
int second = 1;20
int result = 0;21
22for (int i = 0; i < n - 2; i++)
2328
29return
result;
30 }
1. 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
斐波那契數列變種:把n級台階看成f(n),它想調到n級台階前的最後一跳可以通過一步,也可以通過兩步,至於最後一跳之前的跳法種類可以分別通過f(n-1)和f(n-2)表示。
因此,n級台階的不同跳法的總數為f(n)=f(n-1)+f(n-2)。
2. 在青蛙跳台階的問題中,如果把條件改成:乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階……它也可以跳上n級台階,此時請問跳上n級台階共有多少種跳法?
通過數學歸納法,我們可以得到f(n)=2^(n-1)。
【相關題目】
面試題9 斐波那契數列
方法一 很容易想到的解法是直接使用遞迴。c include stdafx.h include using namespace std long long fibonacci unsigned int n if n 1 return fibonacci n 1 fibonacci n 2 int tm...
面試題9 斐波那契數列
題目一 寫乙個函式,輸入n,求斐波那契數列的第n項,斐波那契數列的定義如下 0 n 0 f n 1 n 1 f n 1 f n 2 n 1 遞迴 long long fibonacci unsigned int n if n 0 n 1 return n return fibonacci n 1 f...
面試題9 斐波那契數列
面試題9 題目 寫乙個函式,輸入n,求斐波那契數列的第n項。很多教科書中的解法 long long fibonacci solution1 unsigned int n 這是從第n項向前計算的方法,很多計算量實際上是重複的。long long fibonacci solution2 unsigned...