图源
汉诺塔简言之就是三根柱子,将其中一棵柱子(本文定为A柱)上的圆盘全部移动到另一棵柱子(本文定为C柱)上,在C柱上依然按照在A柱上的顺序进行排列;其中,在过程中依旧不能够让在下方的大圆盘压在其上方的小圆盘上(此处大、小圆盘为相对大、小)。
先规定在上文限定的A柱为初始柱,C柱为目标柱,B柱为中转柱。代码如下:
def moveT(n, a, b, c):
if n == 1:
print(a, '->', c, '2') # 移动最小一个
return
moveT(n-1, a, c, b) # 把除最后一个移到中转柱
print(a, '->', c, '1') # 调整除最小一个的其他圆盘
moveT(n-1, b, a, c) # 把中转柱上的移到目标柱
moveT(3, 'a', 'b', 'c')
可得到结果:
a -> c 2
a -> b 1
c -> b 2
a -> c 1
b -> a 2
b -> c 1
a -> c 2
其中1,2是为便于理解代码。解法不唯一。