斐波那契數列

2021-07-22 07:59:42 字數 2750 閱讀 5153

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

數列:f(n)=1(n=1)

2(n=2)

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

public class solution else

return jumpfloor(target-1)+jumpfloor(target-2);

}}

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

f(n)=1(n=0)

1(n=1)

f(n-1) *2

public class solution else

return 2*jumpfloorii(target-1);

}}

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

依舊是斐波那契數列

2*n的大矩形,和n個2*1的小矩形

其中target*2為大矩陣的大小

有以下幾種情形:

1⃣️target <= 0 大矩形為<= 2*0,直接return 1;

2⃣️target = 1大矩形為2*1,只有一種擺放方法,return1;

3⃣️target = 2 大矩形為2*2,有兩種擺放方法,return2;

4⃣️target = n 分為兩步考慮:

第一次擺放一塊 2*1 的小矩陣,則擺放方法總共為f(target - 1)

第一次擺放一塊1*2的小矩陣,則擺放方法總共為f(target-2)

public class solution 

else if(target==1)

else if(target==2)

else

return rectcover(target-1)+rectcover(target-2);

}}

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。

n<=39

這個題可以說是迭代(iteration) vs 遞迴(recursion),

f(n) = f(n-1) + f(n-2),第一眼看就是遞迴啊,簡直完美的遞迴環境,遞迴肯定很爽,這樣想著關鍵**兩三行就搞定了,注意這題的n是從0開始的: 1

2

if(n<=1)returnn;

elsereturnfibonacci(n-1)+fibonacci(n-2);

然而並沒有什麼用,測試用例裡肯定準備著乙個超大的n來讓stack overflow,為什麼會溢位?因為重複計算,而且重複的情況還很嚴重,舉個小點的例子,n=4,看看程式怎麼跑的:

fibonacci(4) = fibonacci(3) + fibonacci(2);

= fibonacci(2) + fibonacci(1) + fibonacci(1) + fibonacci(0);

= fibonacci(1) + fibonacci(0) + fibonacci(1) + fibonacci(1) + fibonacci(0);

由於我們的**並沒有記錄fibonacci(1)和fibonacci(0)的結果,對於程式來說它每次遞迴都是未知的,因此光是n=4時f(1)就重複計算了3次之多。

那麼如何求解呢,動態規劃似乎不錯,關於動態規劃三個條件:最優子結構、無後效性、子問題重疊這些就不談了,因為理(wo)論(ye)性(bu)太(tai)強(dong)了。

下例是乙個簡單的動態規劃,以一定的空間代價避免代價更大的重複計算的棧空間浪費: 1

2

3

4

5

6

7

8

9

10

if(n<=1)

intrecord =newint[n+1];

record[0] =0;

record[1] =1;

for(inti=2;i<=n;i++)

returnrecord[n];

雖然看起來很蠢,空間浪費了sizeof(int)*(n-1),但是對於那個超大n的測試用例應該是可以通過了,時間複雜度也達到了o(n)。

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契數列

1 題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。斐波那契數列的定義如下 輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入包括乙個整數n 1 n 70 輸出 對應每個測試案例,輸出第n項斐波那契數列的值。2 這是九度上的乙個題,要求時間限制1秒,整數的...