遞歸——漢諾塔問題(python實現)
阿新 • • 發佈:2018-08-22
最大 大盤 其他 pytho 每次 直接 print int b-
規則
- 每次移動一個盤子
- 任何時候大盤子在下面,小盤子在上面
方法
假設共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)
遞歸——漢諾塔問題(python實現)