1. 程式人生 > >青蛙跳臺階問題(二)

青蛙跳臺階問題(二)

題目描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2,也可以跳3,它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法?

解題思路

可以類比每次只跳一級或者二級的跳臺階,可以參考另一篇文章:https://blog.csdn.net/noingw96/article/details/84525458

當每次只跳一級或者二級時,我們利用分治的思想,將n階的問題簡化到n-1階與n-2階,即

                                                                       F(n)=F(n-1)+F(n-2)

因此,在本題中也可以進行簡化

                                                        F(n)=F(n-1)+F(n-2)+\cdot \cdot \cdot \cdot \cdot \cdot +F(1)+F(0)

在編寫程式的時候,只需要在遞迴外加一層迴圈即可。

# 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