悲伤的自由 发表于 2017-8-27 14:54:45

汉诺塔完全想不明白-_-!

汉诺塔的程序想不明白啊!!!

def han(n,x,y,z):      
    if n==1:
      print(x,'-->',z)
    else:
      han(n-1,x,z,y) #将前n-1个盘子从X移动到y上
      print(x,'-->',z) #将最底下的最后一个盘子从x移动到z上
      han(n-1,y,x,z)#将y上的n-1个盘子移动到z上
n=int(input('请输入层数:'))
han(n,'X','Y','Z')


为什么“x,y,z”三个地方的顺序不一样,我发现修改顺序结果就会不一样{:9_221:} 想不通,思绪好乱

ba21 发表于 2017-8-27 15:55:06

x,y,z 顺序不一样,就是汉诺塔移动的3个步骤。知道就好,没必要太纠结。想了解递归,你可以用简单点的例 子模似下。

s1dney 发表于 2017-8-27 19:27:58

你把n-1,x,z,y和n-1,y,x,z八个参数代入函数就变成
han(n-2,x,y,z)
print(x,'-->',y)
han(n-2,z,x,y)

print(x,'-->',z)

han(n-2,y,z,x)
print(y,'-->',z)
han(n-2,x,y,z)

然后无限展开 最后别打印出来的就是print里面的东西,故而xyz位置决定移动顺序
页: [1]
查看完整版本: 汉诺塔完全想不明白-_-!