Python 了解河内塔楼的巨蟒

Python 了解河内塔楼的巨蟒,python,recursion,towers-of-hanoi,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)盘子从源代码放

我理解如何使用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,为什么我们要写河内(n-1,z,y)?为什么我们要换z和y


谢谢

您对变量的理解是错误的:

  • n
    是磁盘数
  • x
    是第一个极点
  • y
    是用于传输的磁极
  • z
    是传输磁盘目标的极点
由于我们想求解河内(n,x,y,z),我们做如下操作:

  • 如果只有一个磁盘要移动,我们就完成了(也就是
    n==1
    位)
  • 否则,我们必须使用临时磁极(
    y
    )将磁盘从源磁极(
    x
    )移动到最终磁极(
    z
我们通过使用
z
(也称
hanoi(n-1,x,z,y)
)将
n-1
磁盘从
x
移动到
y
,然后将最后一个磁盘移动到
z
,然后将所有剩余磁盘(位于
y
上)移动到
z
(最后一极)上,使用
hanoi-1,y,x,z)


下面是一个gif来说明:


您对变量的理解是错误的:

  • n
    是磁盘数
  • x
    是第一个极点
  • y
    是用于传输的磁极
  • z
    是传输磁盘目标的极点
由于我们想求解河内(n,x,y,z),我们做如下操作:

  • 如果只有一个磁盘要移动,我们就完成了(也就是
    n==1
    位)
  • 否则,我们必须使用临时磁极(
    y
    )将磁盘从源磁极(
    x
    )移动到最终磁极(
    z
我们通过使用
z
(也称
hanoi(n-1,x,z,y)
)将
n-1
磁盘从
x
移动到
y
,然后将最后一个磁盘移动到
z
,然后将所有剩余磁盘(位于
y
上)移动到
z
(最后一极)上,使用
hanoi-1,y,x,z)


下面是一个gif来说明:


谢谢您的解释!对不起,我有点笨。关于这一个“使用z(又名hanoi(n-1,x,z,y)),将n-1个磁盘从x移动到y”。当我们写n-1,x,z,y时。Python如何知道我们的意思是使用z将x移动到y?这是编程的一个美妙之处:语言本身并不“知道”任何东西。我们设计的算法接受输入并产生输出,这取决于我们(程序员/用户)对其应用任何意义。我们决定hanoi(n-1,x,z,y)表示使用z而不是Python将n-1个磁盘从x移动到y。谢谢您的解释!对不起,我有点笨。关于这一个“使用z(又名hanoi(n-1,x,z,y)),将n-1个磁盘从x移动到y”。当我们写n-1,x,z,y时。Python如何知道我们的意思是使用z将x移动到y?这是编程的一个美妙之处:语言本身并不“知道”任何东西。我们设计的算法接受输入并产生输出,这取决于我们(程序员/用户)对其应用任何意义。我们决定hanoi(n-1,x,z,y)将表示使用z(而不是Python)将n-1个磁盘从x移动到y。