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