我了解如何使用Python递归解决河内问题,但我不了解如何编写此Python语言:
def hanoi(n,x,y,z):
if n == 1:
print(x, ' --> ',z)
else:
hanoi(n-1,x,z,y)
print(x, ' --> ',z)
hanoi(n-1,y,x,z)
hanoi(2,'SRC','TMP','TAG')
如果第一步是将(x-1)碟从源头转移到tmp,为什么我们要写hanoi(n-1,z,y)?为什么我们切换z和y?
谢谢!
最佳答案
您正在理解错误的变量:n
是磁盘数x
是第一极y
是用于传输的极点z
是已转移磁盘目标的极点
由于我们要求解hanoi(n, x, y, z)
,因此我们执行以下操作:
如果仅移动1个磁盘,则说明已完成(也称为n==1
位)
否则,我们必须使用临时极点(x
)将磁盘从源极(z
)移至最终极点(y
)。
为此,我们使用n-1
(又名x
)将y
磁盘从z
移到hanoi(n-1, x, z, y)
,然后将最后一个磁盘移到z
,然后移动所有剩余的磁盘(在y
上) )放在z
(最后一个极点)上
这是说明的gif: