普通跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)
分析:
設f(n)表示跳上第n個台階的跳法數目,則很容易想到 f(1)=1,f(2)=2 ,當n>2時,則跳到第n個台階前的位置,一定是在第(n-1)個台階或者第(n-2)個台階上,因此在此處得到數學關係為 f(n)=f(n-1)+f(n-2)很容易根據該思路寫出遞迴**:實際上該數學關係為 斐波那契數列
class solution
};
但是我們可以發現,這樣寫的話會有大量重複計算,即就算已經算出了 jumpfloor(number-2) ,在計算jumpfloor(number-1)時還會再計算一遍,因此複雜度將以指數形式上公升。
解決該問題的辦法有兩個,一種是以正向迴圈的方式求解,即順序求f(1),f(2)…f(n-1),f(n),這樣便不會有重複計算
class solution
};
還有一種方法也常用於解決遞迴時重複計算問題,即計算出的結果採用陣列儲存下來,每次遞迴時判斷是否已經求過,如果已經求過則直接採用該值即可。(在此無**)
**跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
分析:
該問題不同於之前的問題,實際上我們可以認為如果設f(n)表示跳上第n個台階的跳法數目因此該題**很容易寫出:則f(n)=f(0)+f(1)+f(2)+…f(n-1),因此可以通過數學推導發現 f(n)=2n−
12^
2n−1
也就是f(n)=2 f(n-1)
可以用數學歸納法證明
class solution
};
或者
class solution
};
遞迴求解青蛙跳台階問題
1.乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階,問這個青蛙跳上n級台階一共有多少種跳法 思路一 和漢諾塔一樣,遞迴的思路就是把問題簡化到更小規模的問題,在寫程式的時候確定兩個目標。一是如何分解乙個問題,二是當該問題分解到最簡時如何處理,將這兩塊內容通過程式告訴電腦,就可以把任務推給電腦,由電腦...
青蛙跳台階問題
題目 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。我的思路 最開始我的思路是把這個看成是乙個數學問題,n i 1 k 2先把所有可能滿足這個公式的i和k求出來。然後在對i和k做排列組合。很明顯i的範圍應該是0 public int jumpflo...
青蛙跳台階問題
1 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。2 乙隻青蛙一次可以跳上1級台階,也可以跳上2 級 它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?分析 1 當n 1,只有1中跳法 當n 2時,有兩種跳法 當n 3 時,有3種跳...