了解河内塔的Python

时间:2014-08-06 23:21:36

标签: python recursion towers-of-hanoi

我理解如何使用Python递归来解决Hanoi,但我不明白我们如何编写这种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?

谢谢!

1 个答案:

答案 0 :(得分:4)

您理解错误的变量:

  • 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),然后将最后一张磁盘移至{{1}来实现此目的然后将所有剩余的磁盘(位于z上)移动到y(最后一极)z


这里有一个gif来说明:

enter image description here