青蛙跳臺階問題(二)
阿新 • • 發佈:2018-12-13
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2,也可以跳3,它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法?
解題思路
可以類比每次只跳一級或者二級的跳臺階,可以參考另一篇文章:https://blog.csdn.net/noingw96/article/details/84525458
當每次只跳一級或者二級時,我們利用分治的思想,將n階的問題簡化到n-1階與n-2階,即
因此,在本題中也可以進行簡化
在編寫程式的時候,只需要在遞迴外加一層迴圈即可。
# 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 else: m=0 for i in range(1,number+1): m+=jump(number-i) return m if __name__=="__main__": n=10 s=jumpFloor(n) end=time.clock()
同樣地,為了節約時間成本,我們可以通過陣列對已經計算好的子問題進行儲存,利用迭代的方法。
# 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, number): a.append(a[i - 1] * 2) return a[i] if __name__=="__main__": n = 10 s = jumpFloor(n) print s