青蛙跳台階問題 遞迴與數學歸納

2021-10-05 06:39:13 字數 1083 閱讀 9484

普通跳台階

乙隻青蛙一次可以跳上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種跳...