參考代碼的意義
def move(n, a, b, c):
? ? if n == 1:
? ? ? ? print a,'-->',c
? ? ? ? return
? ? move(n-1,a,c,b)
? ? print a,'-->',c
? ? move(n-1,b,a,c)
move(4, 'A', 'B', 'C')
能給我詳細解釋一下嗎
def move(n, a, b, c):
? ? if n == 1:
? ? ? ? print a,'-->',c
? ? ? ? return
? ? move(n-1,a,c,b)
? ? print a,'-->',c
? ? move(n-1,b,a,c)
move(4, 'A', 'B', 'C')
能給我詳細解釋一下嗎
2018-07-03
舉報
2018-07-03
def move(n, a, b, c):? ?#? ?該函數的目的是將N個a柱子上的圓盤移動到c上。也就是第二個參數的上的圓盤放到第四個參數上。
? ? if n == 1:? ? ? ? ? ? ? #? ? ?如何只有一個? ?直接將a上的圓盤移動到c上。
? ? ? ? print a,'-->',c
? ? ? ? return? ? ? ? ? #目標完成,結束。
? ? move(n-1,a,c,b)? ? ? #如何a上不只有一個,那么先將a上出底盤外的n-1個圓盤移動到b上,注意函數的目的,是將第二個參數上的圓盤移動到第四個參數上,故而需將第b與c對調,表示將n-1的圓盤先移動到b上。
? ? print a,'-->',c? ? ? ? ? ?# 將a的底盤放到C
? ? move(n-1,b,a,c)? ? ? ?#最后再將b上的n-1個圓盤放到c上。
move(4, 'A', 'B', 'C')
2018-07-03
這個你要一層一層按順序看下來 ,用n = 3 想看起來,?move(n-1,a,c,b) 第一次進出這里面,n 變成2 b -> c, c ->b. 注意字母的賦值變化。在里面重新運行一次move函數,還會有move(n-1,a,c,b),n變為1,b、c回到原來的值。注意這里可以說是函數里的函數里的函數,第三層了。這一層return,結束了,是回到第二次 print a,'-->',c? ? ?move(n-1,b,a,c). 這個時候的n是2,進入一次move(n-1,b,a,c).?
邏輯上并不能,只是感覺我們人腦進行這樣的思考,很容易混淆吧不熟練的話??梢阅靡粡埓蟮募垼粚訉勇孪聛?,會比較清晰吧。