python之旅Day6——遞歸
阿新 • • 發佈:2018-06-17
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——遞歸