青蛙跳台階問題

2021-10-22 17:18:15 字數 1512 閱讀 2967

有乙隻青蛙,一次可以跳一層台階也可以跳兩層台階,問n層台階共有多少種跳法?

首先假設當有n層時,有f(n)種跳法

一、n<=2時

n=1,只有一種跳法,即跳一層

f(1)=1;

當n=2時,有兩種跳法:

直接跳2層

跳2次,每次跳1層,1+1=2

f(2)=2;

二、n>2時

n=3,第一跳有兩種跳法:

跳1層,剩下2層

剩下的兩層又回到了n=2時的情況(可以理解為,青蛙現在處在第一層台階上,還剩下兩層,有幾種跳法),因此又有兩種跳法

跳2層,剩下1層

因此n=3時有3種跳法:

1+1+1

1+22+1

f(3)=f(2)+f(1)=3;

n=4,第一跳還是有兩種跳法:

跳1層,剩下3層

剩下的兩層回到了n=3時的情況(可以看做青蛙處在第一層,還需要跳3層,這3層有多少種跳法),n=3時有3種跳法

跳2層,剩下2層

剩下的2層回到了n=2的情況,n=2時有2種跳法

因此n=4時有3+2+5種跳法(其中3是跳3層的跳法,2是跳2層的跳法)

n=5時,第一跳也是有兩種跳法,跳1層和跳2層:

跳1層,則剩4層,4層的跳法有5種;

跳2層,則剩3層,3層的跳法有3種;

所以n=5時共有5+3=8種跳法

f(5)=f(4)+f(3)=8……

…當n=k時,第一跳還是有兩種,跳1層和跳2層:

跳1層,剩k-1層;

跳2層,剩k-2層;

所以n=k時

f(k)=f(k-1)+f(k-2);

這樣就構造出了迭代關係式

一、函式遞迴

#include

intjump

(int n)

//跳n個台階有多少方法

intmain()

當台階數較多時(在我的電腦上,當n>30)時能明顯感覺到計算速度很慢。在函式遞迴的時候,重複計算的次數會很多,例如當n=30時,需要計算f(29)和f(28),而計算f(29)時又要重新繼續算f(28),f(28)就被重複計算了1次,而f(3)被重複計算的次數更多,因此程式會很慢。

二、迴圈

#include

intjump

(int n)

//跳n個台階有多少方法

return cnt;

}int

main()

青蛙跳台階問題

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