青蛙跳台階問題的詳細講解

2021-09-18 03:27:41 字數 1587 閱讀 2034

乙隻青蛙要跳上n層高的台階,一次能跳一階,也可以跳2階,請問這只青蛙跳上n層高的台階有多少種跳法?

背景知識點補充(了解)

斐波那契數列

斐波那契數列(fibonacci sequence),又稱**分割數列,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞迴的方法定義:f(1)=1,f(2)=1, f(n)=f(n-1)+f(n-2)(n>=2,n∈n*)

補充:通俗來講當n>=2,該元素為前兩位的數字之和,依次往後

遞迴函式

如果乙個函式在內部不呼叫其它的函式,而是自己本身的話,這個函式就是遞迴函式。

def

calnum

(num)

:if num >=1:

result = num * calnum(num-1)

# 函式內部呼叫自己

else

: result =

1return result

print

(calnum(3)

)# 結果為6

設青蛙跳上n級台階有f(n)總方法,f(n)總方法分為兩種:

最後一次跳了一級台階,這類方法共有f(n-1)種;

最後一次跳了兩級台階,這類方法共有f(n-2)種。

因此,可以得出公式:f(n)=f(n-1)+f(n-2),類似斐波那契數列

補充:也可以用具體結果推算規律

台階 跳法

1 1

2 2

3 3

4 5

5 8

6 13

7 21

8 34

... ...

規律:前兩位的和等於後面的數,屬於斐波那契數列

方法1(遞迴):
def

fibo

(n):

if n==

1or n==2:

return n

return fibo(n-1)

+ fibo(n-2)

if __name__ ==

"__main__"

:print

(fibo(8)

)# 輸出34

方法2(迴圈代替遞迴):
def

fibo

(n):

if n==

1or n==2:

return n

a, b =1,

2for i in

range(3

,n+1):

a, b = b, a+b # 組合進行迴圈(如:2,3 = 3,5;3,5 = 5,8; ...)

return b

if __name__ ==

"__main__"

:print

(fibo(8)

)# 輸出34

青蛙跳台階問題

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