鱼C论坛

 找回密码
 立即注册
查看: 3979|回复: 21

[已解决]汉诺塔具体步骤

[复制链接]
发表于 2022-2-10 20:48:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 kaozhaohun 于 2022-2-10 20:58 编辑
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)
n = int(input("请输入层数"))
hanoi(n,"x","y","z")
,

请输入层数3
x --> z
x --> y
z --> y  搞不懂"z"是怎么替代x的,我找了半天视频没一个人说过这问题,有谁能说说吗?
x --> z
y --> x
y --> z
x --> z
最佳答案
2022-2-10 22:17:04
n代表几个圆盘,x代表第一条柱子,y代表第二条柱子,z代表第三条柱子
目的:把所有的圆盘的顺序原封不动地移动到第三根柱子

如果只有一个圆盘,则直接从第一根柱子移动到第三根柱子,
if n==1:
        print(x,"-->",z)
x 为第二个形参,z为第四个形参,也就是说是由第二个形参移动到第四个形参
如果不只有一个圆盘,则将除最底下的圆盘外的其它圆盘移动到第二根柱子,即y柱,
hanoi(n-1,x,z,y)   # 第二个形参移动到第四个形参,x移动到y
然后将最底下的移动到第三根柱子,即z柱
print(x,"-->",z)
最后将第二根柱子上的圆盘移动到第三根柱子,即y柱移动到z柱,所以此时由y充当第二个形参,z充当第四个形参,因为圆盘数始终充当第一个形参,剩下的那根柱子就是第三个形参了
hanoi(n-1,y,x,z)   # y柱移动到z柱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-10 20:59:56 | 显示全部楼层
有大佬知道吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-10 22:17:04 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +10 鱼币

n代表几个圆盘,x代表第一条柱子,y代表第二条柱子,z代表第三条柱子
目的:把所有的圆盘的顺序原封不动地移动到第三根柱子

如果只有一个圆盘,则直接从第一根柱子移动到第三根柱子,
if n==1:
        print(x,"-->",z)
x 为第二个形参,z为第四个形参,也就是说是由第二个形参移动到第四个形参
如果不只有一个圆盘,则将除最底下的圆盘外的其它圆盘移动到第二根柱子,即y柱,
hanoi(n-1,x,z,y)   # 第二个形参移动到第四个形参,x移动到y
然后将最底下的移动到第三根柱子,即z柱
print(x,"-->",z)
最后将第二根柱子上的圆盘移动到第三根柱子,即y柱移动到z柱,所以此时由y充当第二个形参,z充当第四个形参,因为圆盘数始终充当第一个形参,剩下的那根柱子就是第三个形参了
hanoi(n-1,y,x,z)   # y柱移动到z柱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-2-11 00:13:06 | 显示全部楼层
isdkz 发表于 2022-2-10 22:17
n代表几个圆盘,x代表第一条柱子,y代表第二条柱子,z代表第三条柱子
目的:把所有的圆盘的顺序原封不动地 ...

我想知道的是代码执行中,'z'是怎么替换x的,就是具体执行,你这和视频中讲的没区别啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 00:14:44 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-11 00:16 编辑
kaozhaohun 发表于 2022-2-11 00:13
我想知道的是代码执行中,'z'是怎么替换x的,就是具体执行,你这和视频中讲的没区别啊!


通过形参的位置替换的呀,你调用的时候传进去的是字符串'x'、'y'、'z',可是在函数内部使用的都是形参,形参的位置不一样,自然传进去的字符串的位置也会相应变化了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-11 00:15:58 | 显示全部楼层
我看这上面z不是第三个形参,就是第四个形参,x是怎么替换到他的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 00:18:39 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-11 00:19 编辑

你看到的只是表象,一层一层的递归中总有字符串'z'作为第二个形参x的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 00:21:37 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-11 00:22 编辑

z和y换过位置,而y和x又换过位置,所以z会出现在x的位置上
hanoi(n-1,x,z,y)    # z 和 y 换位置
print(x,"-->",z)
hanoi(n-1,y,x,z)    # y 和 x 换位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-11 00:22:46 | 显示全部楼层
isdkz 发表于 2022-2-11 00:18
你看到的只是表象,一层一层的递归中总有字符串'z'作为第二个形参x的

好吧,也是,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 08:14:07 | 显示全部楼层

回帖奖励 +10 鱼币

kaozhaohun 发表于 2022-2-11 00:22
好吧,也是,谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 08:34:00 | 显示全部楼层

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-11 08:36:40 | 显示全部楼层

回帖奖励 +10 鱼币

依然懵了个懵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 08:52:35 | 显示全部楼层

回帖奖励 +10 鱼币

学习学习,似懂非懂最难受了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 08:57:39 | 显示全部楼层

回帖奖励 +10 鱼币

学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 09:17:43 | 显示全部楼层

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-11 09:37:43 | 显示全部楼层

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-11 09:43:24 | 显示全部楼层

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-11 10:38:04 | 显示全部楼层

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-12 15:01:03 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-25 11:57:45 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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