我了解如何使用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:

10-06 06:53