爬台階問題

2021-09-30 09:05:16 字數 783 閱讀 8410

跳台階問題:乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。

在這個跳樓梯的題目中,每次可以跳1個台階或者2個台階。我們考慮,我們是如何跳到n這個台階的,一共有兩種方式,一種是從n-1台階跳乙個台階,另外一種是從 n-2跳2個台階,所以:

f(n) = f(n-1) + f(n-2)並且  f(1)=1, f(2) = 2 。

容易看出,其實這就是乙個斐波那契數列。

遞迴:時間複雜度為o(n^2)

非遞迴:時間複雜度為o(n),空間複雜度為o(1)

int upstairs(int n){

int a=1,b=2,sum=0;

if(n==1|n==2)

return n;

for(int i=2;i

仍是看上面的"台階問題",由登10級台階所用的步數不同,可以劃分為如下的幾種情況:

a、共要登10步(全部都是每步登1級):有1種登法;

b、共要登9步(只有某一步登2級,其餘每步登1級):有c91=9種登法;

c、共要登8步(只有某兩步每步登2級):有c82=28種登法;

d、共要登7步(只有某三步每步登2級):有c73=35種登法;

e、共要登6步(只有某四步每步登2級):有c64=15種登法;

f、共要登5步(全部都是每步登2級):有c55=1種登法;

因此總共的登法有1+9+28+35+15+1=89種。

具體見參考。

參考:

爬台階 遞迴

先說一下遞迴的作用 1.替代多重迴圈 2.解決本來就是遞迴形式定義的問題 3.將問題分解為規模更小的子問題進行求解 這裡是將問題分解為規模更小的子問題進行求解 先考慮第一步怎麼做,根據第一步把問題分為幾大類,剩下的事情就變成乙個子問題,這個子問題可能是形式相同但規模更小,就可以寫出遞推式,再寫出邊界...

3 頑猴爬台階

一天乙隻頑猴想要從山腳爬到山頂途中經過乙個有n個台階的階梯,但是這個猴子有個習慣,每一次只跳1步或3步。試問?猴子通過這個階梯有多少種不同的跳躍方式 輸入描述 輸入只有乙個這個數n 0 輸出描述 有多少種跳躍方式 例項 輸入 50 輸出 122106097 輸入 3 輸出2 檢視 import j ...

跳台階問題

題目 乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。分析 這道題最近經常出現,包括microstrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2...