鱼C论坛

 找回密码
 立即注册
查看: 1537|回复: 4

[已解决]汉诺塔递归算法理解

[复制链接]
发表于 2020-9-11 23:19:14 | 显示全部楼层 |阅读模式

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

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

x
最近看了很多知乎上面的解答,以及b站的视频,还有论坛的解答,始终没有理解其本身,

之前也发个一个关于递归求助贴,这位鱼c导师给出了答案,也满耐心的给解答了,同时也认可他的解答,他的答案虽然我没有完全理解其本身,。
sunrise085
https://fishc.com.cn/forum.php?m ... hlight=%BA%BA%C5%B5

def hanoi(n, x, y, z):
    if n == 1:
        print(x, ' --> ', z)
    else:
        hanoi(n-1, x, z, y) # 将前n-1个盘子从x移动到y上
        print(x, ' --> ', z) # 将最底下的最后一个盘子从x移动到z上
        hanoi(n-1, y, x, z) # 将y上的n-1个盘子移动到z上
可能由于个人的理解能力不是很好,以上代码还是有诸多不理解地方,
1,else中有两个调用函数,
他是先执行第一个函数调用,
还是先执行第二个函数调用或者等第一个函数递归完毕,
再执行第二个呢。或者其他的流程
希望能把上面的代码每一个流程,参数的变化,用图逐一展示。


最佳答案
2020-9-12 00:09:32
流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给调用者)

比如你这个汉诺塔函数,从第一次else调用:hanoi(n-1, x, z, y),它会一直调用,直到收到结果

http://pythontutor.makerbean.com/visualize.html#mode=display   运行可视化,你去这里看看把,还有看不懂在说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-12 00:09:32 | 显示全部楼层    本楼为最佳答案   
流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给调用者)

比如你这个汉诺塔函数,从第一次else调用:hanoi(n-1, x, z, y),它会一直调用,直到收到结果

http://pythontutor.makerbean.com/visualize.html#mode=display   运行可视化,你去这里看看把,还有看不懂在说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 00:24:04 | 显示全部楼层
Stubborn 发表于 2020-9-12 00:09
流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给 ...

这个程序不错,我输入 26 层 汉诺塔,能计算出共需要 999 步执行完成。我想收藏,可惜只能收藏第1楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 10:17:13 | 显示全部楼层
风过无痕1989 发表于 2020-9-12 00:24
这个程序不错,我输入 26 层 汉诺塔,能计算出共需要 999 步执行完成。我想收藏,可惜只能收藏第1楼

只是因为只能计算999步。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 11:21:39 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-9-12 10:17
只是因为只能计算999步。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 18:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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