面試題9 斐波那契數列

2022-07-27 11:45:15 字數 1270 閱讀 2345

【題目描述】

寫乙個函式,輸入n,求斐波那契數列的第n項。

【解決方案】

1. 遞迴,效率很低,挑剔的面試官不會喜歡。

因為遞迴的過程由於呼叫函式自身,函式呼叫是有時間和空間的消耗,每一次呼叫函式,都需要再記憶體棧中分配空間以儲存引數、返回位址及臨時變數,而且往棧裡壓入資料和彈出資料都是需要時間的,每個程序的棧容量是有限的,很可能會引起呼叫棧溢位。

另外,遞迴中有可能很多計算都是重複的,從而對效能帶來很大的負面影響。

2. 迭代(迴圈)。

我的**實現1,僅供參考:

1

///2

///遞迴實現

3///

4///

5///

6public

static

int fibonacci(intn)7

1213

if (n == 1)14

1718

return fibonacci(n - 1) + fibonacci(n - 2

);19 }

我的**實現2,僅供參考:

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...