青蛙跳台階問題(一)

2021-09-01 22:08:51 字數 1558 閱讀 7288

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)?

第一步,我們確定每一次上台階只有兩種選擇,跳一階或者兩階。

第二步,我們走完第一步時可能已經跳了一階或者兩階,因此剩下的台階是n-1或者n-2階。

第三步,設剩下的n-1階有m1種跳法,剩下的n-2階有m2種跳法,則n階台階的跳法有m1+m2種。

經過上述問題,我們就將乙個n階的問題化成了比n小階的問題,利用的就是分治的思想,實現的**也比較簡單。

# coding:utf-8

def jumpfloor(number):

if number==0:#跳的台階為0的情況

return 0

else:

return jump(number)

def jump(number):

if number==0:

return 1

if number==1:

return 1

if number>1:

m1=jump(number-1)

m2=jump(number-2)

return m1+m2

if __name__=="__main__":

n=10

s=jumpfloor(n)

print s

當我們使用這個方法解決n較小的問題時還是可行的,如果n比較大的時候,由於大量的遞迴運算,我們的時間和空間成本都是極大的。在這裡我做了乙個測試,對程式的執行時間進行計算。

當n=20的時候,執行時間還是可以接受的。

當我們取n=35時,這個執行時間我們就難以接受了,難以想象n取更大的數值時我們的等待時間。

我們在這裡介紹第二種方法,利用動態規劃法的思想將已經計算的子問題使用陣列進行儲存。其實細心的朋友應該發現了,這一道問題就是我們常說的斐波拉契數列的實際應用。

# coding:utf-8

def jumpfloor(number):

if number==0:

return 0

if number==1:

return 1

if number==2:

return 2

a = [1,2]

for i in range(2,n):

return a[i]

if __name__=="__main__":

n=10

s=jumpfloor(n)

print s

我們同樣可以對程式的執行時間進行測試,顯然這個時間才是乙個程式的正常等待時間。

青蛙跳台階問題

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