我理解如何使用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?
谢谢!
答案 0 :(得分:4)
您理解错误的变量:
n
是磁盘数x
是第一根杆子y
是用于转移的极点z
是传输磁盘目标的极点由于我们要解决hanoi(n, x, y, z)
,我们按以下方式执行:
n==1
位)x
)将磁盘从源极点(z
)移动到最终极点(y
)我们通过使用n-1
(又名x
)将y
磁盘从z
移至hanoi(n-1, x, z, y)
,然后将最后一张磁盘移至{{1}来实现此目的然后将所有剩余的磁盘(位于z
上)移动到y
(最后一极)z
这里有一个gif来说明: