鱼C论坛

 找回密码
 立即注册
查看: 813|回复: 10

[已解决]python 024 讲 汉诺塔 问题求助~

[复制链接]
发表于 2018-10-15 23:43:40 | 显示全部楼层 |阅读模式

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

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

x

我的疑问很简单,下面图片里面红色框框里面的 X,Y,Z 都是形参吗?
不管他们的位置如何调换,实参 值 都是 从左往右 依次是 a, b, c 吗?


QQ截图20181015233756.png

最佳答案
2018-10-15 23:49:48
内部是调用了,可以说是实参
不是,次序跟着调换了
你把后面的注释变成 2 个盘子,思考以下,然后就明白啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-15 23:49:48 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

内部是调用了,可以说是实参
不是,次序跟着调换了
你把后面的注释变成 2 个盘子,思考以下,然后就明白啦

评分

参与人数 1贡献 +3 收起 理由
13572044595 + 3 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-10-15 23:59:03 | 显示全部楼层
claws0n 发表于 2018-10-15 23:49
内部是调用了,可以说是实参
不是,次序跟着调换了
你把后面的注释变成 2 个盘子,思考以下,然后就明白 ...

没明白,我还是感觉 实参的位置没有 跟着形参 去变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 00:08:03 | 显示全部楼层
claws0n 发表于 2018-10-15 23:49
内部是调用了,可以说是实参
不是,次序跟着调换了
你把后面的注释变成 2 个盘子,思考以下,然后就明白 ...

你看一下下面这个图~

图例第二个指向的位置,  “2  执行 h(2,x,z,y) #特别注意:此时形成和实参的对应关系是 x-x,y-z,z-y”


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

使用道具 举报

发表于 2018-10-16 00:14:05 | 显示全部楼层
13572044595 发表于 2018-10-15 23:59
没明白,我还是感觉 实参的位置没有 跟着形参 去变化

A,B,C ------>  x,y,z

两 空 空
A   B   C

大 小 空
A   B   C   A------->B   #先搬去缓冲

空 小 大
A   B   C   A------->C

空 空 2
A   B   C   B------->C

n = 2 #所以 n = 1 退出
hanoi(n-1, x,z,y)   #先把缓冲与目的地对调,内部又有 print(x,'---->', z) # 此时的 z 是 y,缓冲
print(x,'---->', z) # 此时的 z 是原本的 z,目的地
hanoi(n-1,y,x,z)    #把缓冲与起始对调,下一次打印的就是缓冲到目的地

大致的思路就是这样~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 00:26:49 | 显示全部楼层
claws0n 发表于 2018-10-16 00:14
A,B,C ------>  x,y,z

两 空 空

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

使用道具 举报

发表于 2018-10-16 00:36:34 | 显示全部楼层

代码是你上面的,那三行不可以分开,缺一不可~~
我写的 ABC 是实际的移动过程
你要如何去模拟这个变动?为了让代码以最简洁的方式呈现,你递归调用的参数就要用变动
print() 始终是位置一到位置三

递归的参数一定有改变,没有的话会是死循环,然后把内存吃光,然后报错~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 00:40:06 | 显示全部楼层
claws0n 发表于 2018-10-16 00:36
代码是你上面的,那三行不可以分开,缺一不可~~
我写的 ABC 是实际的移动过程
你要如何去模拟这个变动 ...

非常感谢追答,
你的回复我明天再好好研究研究,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 00:40:41 | 显示全部楼层

hanoi(2,A,B,C)  我用大写,懒得打引号~
n != 1  ---> else:
hanoi(1,A,C,B)                          #进入函数
    n == 1 -----> print(A--->B)   #然后退出函数
print(A--->C)      # 比起其他的打印,是上一层参数
hanoi(1,B,A,C)                          #进入函数
    n == 1 -----> print(B--->C)   #然后退出函数

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

使用道具 举报

发表于 2018-10-16 08:40:45 | 显示全部楼层

回帖奖励 +1 鱼币

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

使用道具 举报

发表于 2018-10-16 08:40:59 | 显示全部楼层

回帖奖励 +1 鱼币

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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