劍指Offer9斐波那契數列

2021-06-23 04:42:01 字數 747 閱讀 4571

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

f(0) = 0;

f(1) = 1;

f(n) = f(n-1)+f(n-2);

方法1:

遞迴實現

long long fibonacci(unsigned int n)

方法2:

迴圈實現,並且不用陣列來記錄每乙個值,只要記錄最後兩個變數就可以

**:long long fibonaccifangfa2(unsigned int n)

return num;}

1,上台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級台階總共有多少種跳法。

分析:如果是n級台階當成是f(n),當第一次跳一級台階,那麼後面的n-1級台階就有f(n-1),如果第一次跳了2級台階,那麼後面還剩n-2級台階就有f(n-2)。所以

f(n) = f(n-1)+f(n-2)

2.覆蓋地磚

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形,問:用8個2*1的小矩形無重疊地覆蓋乙個2*8的大矩形,總共有多少種方法?

分析:先把2*8的覆蓋方法記為f(8),用第乙個1*2的小矩形去覆蓋大矩形的最左邊時有兩個選擇,豎著放,或者橫著放。當豎著放的時候,右邊還剩下2*7的區域,這種情況下的覆蓋方法就是f(7),當用兩個1*2橫著放,覆蓋最左邊的的大矩形的時候,右邊還剩下2*6的區域,這種情況下的覆蓋方法就是f(6).所以:

f(n) = f(n-1) + f(n-2)

劍指offer 9 斐波那契數列

求斐波那契數列的第 n 項,n 39。思路解析 兩種方式 1.利用公式求取每乙個f n 的值,並利用乙個n 1的陣列來儲存每乙個f n 的值,此方法空間複雜度為o n 2.利用兩個變數儲存f n 1 和f n 2 的值,利用公式f n f n 1 f n 2 並不斷更新f n 1 與f n 2 的值...

劍指offer 9 斐波那契數列

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 第一種解法不好 會重複計算很多值,時間複雜度以n的指數方式增長 long fibonacci int n 優化解法 從下往上計算。見解法二 動態規劃問題 class solution return m...

劍指offer 9 斐波那契數列

現在要求輸入乙個整數n,輸出斐波那契數列的第n項。傳統遞迴實現,需要求多個重複子問題。使用動態規劃,memo記錄,但是,只是用了兩個。因此改進冬天規劃 普通的動態規劃 int fibonacci int n for int i 2 i n i return memo n 使用三個int不停的交換 i...