漢諾塔的移動--python遞歸實現
參數n為漢諾塔要移動的初始層數。a, b, c 為對應的柱子
方法如下
def move(n, a, b, c): if n == 1: print(a, '--->', c) else: move(n-1, a, c, b) move(1, a, b, c) move(n-1, b, a, c) move(3, A, B, C)
分析:
a1,a2,a3...為對應的塔
如果n=1時,即就一層時,就只需要將a1從A移動C就可以了
當n=2時, move(n-1, a, c, b) 就將最上層(a1)從A移動到B
move(1, a, b, c) 將A的最后一個(a2)移動到C
move(n-1, b, a, c) 將之前移動到B的最上層(a1)移動到C
完成
當n=3時,move(n-1, a, c, b) 會回溯調用兩次 因為 n-1為2 判斷還是不通過時:
n=2;方法參數為m(2,A,C,B),再次調用
move(n-1, a, c, b) 將a1從A移動到C
move(1, a, b, c) 將的a2從A移動B
move(n-1, b, a, c) 將a1從C移動B
完成當前調用退到上層
move(1, a, b, c) 將A的最后一個(a3)移動到C
move(n-1, b, a, c) 也會回溯兩次,n-1為2 判斷不通過
n=2時,此時方法參數為 m(2, A, B, C),再次調用
move(n-1, a, c, b) 將a1從 B移動到 A
move(1, a, c, b) 將a1從 B移動到 C
move(n-1, b, a, c) 將a1從 A移動到 C
完成當前調用退到上層
循環完成