遞迴求解青蛙跳台階問題

2021-09-24 18:36:27 字數 1926 閱讀 3398

1.乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階,問這個青蛙跳上n級台階一共有多少種跳法

思路一:

和漢諾塔一樣,遞迴的思路就是把問題簡化到更小規模的問題,在寫程式的時候確定兩個目標。一是如何分解乙個問題,二是當該問題分解到最簡時如何處理,將這兩塊內容通過程式告訴電腦,就可以把任務推給電腦,由電腦來解決「具體如何遞推、如何回歸」的問題。

我們從最簡單的情況開始分析,當n=1時,青蛙只有一種跳法,也就是跳1級台階;當n=2時,青蛙有兩種跳法,一種是一次跳1級,一種是一次跳兩級;而當n=3時,青蛙最後一次跳的時候有兩種可能,一種是最後一次跳了1級,一種是最後一次跳了兩級,

這個時候我們不管青蛙前面是怎麼跳的,只需要把最後一步跳1級的所有可能和最後一步跳2級的所有可能都加起來,就是n=3時所有的可能性。這樣就將問題分解了。

比如當n=10時,最後一步青蛙有兩種跳法,跳1級或者跳2級,那麼怎麼才能跳到倒數第一步呢,跳完倒數第二步就該跳倒數第一步了,倒數第二步也有兩種跳法,跳1級或者跳2級,怎麼才能跳到倒數第二步呢,跳完倒數第三步…以此類推下去,到第一步或者第二步的時候我們就確切的知道了青蛙有幾種跳法。

我們將以上思路抽象成數學公式,令f(n)為n級台階的總跳法數,如果最後一步選擇跳1級的話,之前就只有(n-1)級台階可跳,(n-1)級的總跳法數是f(n-1),如果最後一次跳2級的話,之前就只有(n-2)級台階可跳,(n-2)級台階的總跳法數是f(n-2),因為青蛙最後一步不是跳1級就是跳2級,所以剛剛列舉的就是青蛙的所有跳法,即f(n)=f(n-1)+f(n-2).

思路二:

我們同樣也可以採取找規律的方法看待這個問題,我們先手動計算出當n<=7時青蛙的跳法:n1

2345

67跳法總數12

35813

21由**可以看出這其實就是數學中的斐波那契數列,而斐波那契數列的每一項的值就是前兩項的和,設f(n)為數列第n項的值,則f(n)=f(n-1)+f(n-2),和思路一得到的結果相同

c語言實現:

#include

intgua

(int n)

else

if(n>0)

else

if(n<=0)

return sum;

}int

main()

return0;

}

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

思路:這個問題是上個問題的演化和加深,但其實理解的思路還是一樣的,對於最多一次跳2級的青蛙來說,跳到最後一步時有兩種可能:跳1級或者跳2級;對於最多一次跳3級的青蛙來說,跳到最後一步時有三種可能:跳1級或跳2級或跳3級;對於最多一次跳n級的青蛙來說,跳到最後一步時就有n種可能:跳1級或跳2級或跳3級…或跳n級。一次可以跳n級的青蛙跳倒數第二步時就有(n-1)種可能,倒數第三步有(n-2)種可能…假設該青蛙跳n級台階的跳法總數為f(n),則和第一題類似的,如果最後一步選擇跳1級的話,之前就只有(n-1)級台階可跳,(n-1)級的總跳法數是f(n-1),如果最後一次跳2級的話,之前就只有(n-2)級台階可跳,(n-2)級台階的總跳法數是f(n-2),如果最後一次跳3級的話,之前就只有(n-3)級台階可跳,(n-3)級台階的總跳法是f(n-3)…如果最後一次跳n級的話,之前就只有(n-n)級台階可跳,(n-n)級台階的總跳法是f(n-n),至此也就羅列了所有的跳法可能,將以上跳法數加起來就是總的跳法數,即f(n)=f(n-1)+f(n-2)+f(n-3)+…+f(n-n)我們進行一下數學推導:

c語言實現:

#include

intgua

(int n)

else

if(n<=

2&&n>0)

else

if(n<=0)

return sum;

}int

main()

return0;

}

青蛙跳台階問題

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

青蛙跳台階問題

問題一 有乙隻青蛙,需要跳上100級台階。青蛙每次可以調一級或者兩級台階。問青蛙有多少種方式可以跳100級台階。思路 逆推 當青蛙站在100級台階上時,那它跳上100級時有可能是從99級跳一級上來的,也可能是從98級跳兩級跳上來的 從98級跳兩個一級包括在從99級跳一級情況內,所以不予考慮 所以f ...