乙隻青蛙要跳上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 ...