1. 程式人生 > >python之旅Day6——遞歸

python之旅Day6——遞歸

light bsp 進行 滿足 pre 使用遞歸 lse 規模 calc()

一、遞歸的常規格式 

def test(n):                    #一般來說,都是對test(n)函數的參數進行改變,才會有遞歸的產生
    if 對n的條件:               #首先確定遞歸函數的結束調節,當滿足條件時,返回所期望的最終值
        retrun result
    
    對n進行相應的賦值操作         #當條件不滿足時,則對參數進行處理,以縮小範圍,減小問題規模
    test(new_n)                   #自身調用自身,實現遞歸

  註意:使用遞歸時,要確保test(n)和test(new_n)所執行的過程完全一致。

二、遞歸函數的運行過程

def calc(n):
    print(n)

    if int(n/2) == 0:
        return n

    res = calc(n/2)
    return res

calc(5)

技術分享圖片

從上圖可以看出,只要參數n除以2得到的傷不等於零時,就會將商作為calc()函數的參數再次調用函數。再此過程中,上一層的函數其實並沒有結束,最後一句的return res是到最後得出結果後,一層一層向上傳入的。所以說明遞歸的運行占用內存很大。

三、漢諾塔是實現

def haino(n, x, y, z):
    if n == 1:
        print(x, "->", z)           #最終期望x軸上只有一個盤,最後放到z軸上
    else:
        haino(n - 1, x, z, y)        #將除最後一個盤外的所有盤,從x軸放到y軸上
        print(x, "->", z)           #這樣,就能將最後一個盤,從x軸放到z軸上
        haino(n - 1, y, x, z)        #將剩下的盤從y軸借助x軸放到z軸上


haino(3, "x", "y", "z")

x -> z
x -> y
z -> y
x -> z
y -> x
y -> z
x -> z

  

python之旅Day6——遞歸