規則 1. 每次移動一個盤子 2. 任何時候大盤子在下麵,小盤子在上面 方法 假設共n個盤子 當n=1時: 1. 直接把A上的一個盤子移動到C上(A C) 當n=2時: 1. 把小盤子從A放到B上(A B) 這裡開始採用參數,rsc源地址=A,dst目的地址=B 2. 把大盤子從A放到C上( A C ...
規則
- 每次移動一個盤子
- 任何時候大盤子在下麵,小盤子在上面
方法
假設共n個盤子
- 當n=1時:
- 直接把A上的一個盤子移動到C上(A->C)
- 當n=2時:
- 把小盤子從A放到B上(A->B)這裡開始採用參數,rsc源地址=A,dst目的地址=B
- 把大盤子從A放到C上( A->C)rsc=A, dst=C
- 把小盤子從B放到C上(B->C)rsc=B, dst=C
- 當n=3時:
- 把A上的兩個盤子,通過C移動到B上去, 調用遞歸實現(A-C->B)rsc=A, trans中轉=C, dst=B
- 把A上剩下的一個最大盤子移動到C上(A->C)rsc=A, dst=C
- 把B上兩個盤子,藉助於A,挪到C上去, 調用遞歸(B-A->C)rsc=B, trans=A, dst=C
當n=n時:
把A上的n-1個盤子,藉助於C,移動到B上去,調用遞歸(A-C->B)rsc=A, trans=C, dst=B
把A上的最大一個盤子,移動到C上(A->C)rsc=A, dst=C
把B上n-1個盤子,藉助於A,移動到C上, 調用遞歸(B-A->C)rsc=B, trans=A, dst=C
每次都是先將其他圓盤移到輔助柱子上,再將最底下的移到C,然後再把原先柱子作為輔助柱子,重覆
代碼實現
def move(n, a, b, c):
'''
漢諾塔的遞歸實現
n:代表幾個盤子
a:代表第一個塔,rsc
b:代表第二個塔,trans
c:代表第三個塔, dst
'''
if n == 1:
print(a, '=>', c)
else:
move(n-1, a, c, b)
print(a, '=>', c)
move(n-1, b, a, c)