鱼C论坛

 找回密码
 立即注册
查看: 4823|回复: 2

[已解决]汉诺塔完全想不明白-_-!

[复制链接]
发表于 2017-8-27 14:54:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  1. def han(n,x,y,z):      
  2.     if n==1:
  3.         print(x,'-->',z)
  4.     else:
  5.         han(n-1,x,z,y) #将前n-1个盘子从X移动到y上
  6.         print(x,'-->',z) #将最底下的最后一个盘子从x移动到z上
  7.         han(n-1,y,x,z)#将y上的n-1个盘子移动到z上
  8. n=int(input('请输入层数:'))
  9. han(n,'X','Y','Z')
复制代码


为什么“x,y,z”三个地方的顺序不一样,我发现修改顺序结果就会不一样 想不通,思绪好乱
最佳答案
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位置决定移动顺序
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-27 15:55:06 | 显示全部楼层
x,y,z 顺序不一样,就是汉诺塔移动的3个步骤。知道就好,没必要太纠结。想了解递归,你可以用简单点的例 子模似下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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位置决定移动顺序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 17:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表