鱼C论坛

 找回密码
 立即注册
查看: 2112|回复: 8

请教一下汉诺塔代码怎么走的

[复制链接]
发表于 2016-5-29 22:18:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 西殴 于 2016-9-30 18:00 编辑

结果

结果

代码

代码

就是想问一下这个汉诺塔的代码怎么走的      


3层 和4层怎么又不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-30 10:18:20 | 显示全部楼层
这个递归的确比较难理解,简单说一下,如果想把所有的从A移到C,则需把上面n-1个先移到B,再把第n个移到C,再把上面n-1个移到C,这就是上面程序else的内容。逐步递归到最上一层。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-30 10:19:45 | 显示全部楼层
原理能说出来,就是程序代码看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-30 23:04:06 | 显示全部楼层
冬雪雪冬 发表于 2016-5-30 10:18
这个递归的确比较难理解,简单说一下,如果想把所有的从A移到C,则需把上面n-1个先移到B,再把第n个移到C, ...

那为什么是先执行if n ==1里的print(a , ' --> ' , c)  再执行else的print(a,  '  -> ' , c)
为了区分两个的不同我用了 【-->】和【->】来区分  

  还是说我在区分这里就想错了呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-31 08:20:11 | 显示全部楼层
递归需有一个跳出操作,否则会一直递归直至溢出报错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-31 15:51:39 | 显示全部楼层
西殴 发表于 2016-5-30 23:04
那为什么是先执行if n ==1里的print(a , ' --> ' , c)  再执行else的print(a,  '  -> ' , c)
为了区分 ...

并不是先执行if n == 1例的print,再执行else里的print。n是层数,当只有1层也就是n==1的时候,要从a移动到c那就直接移动就好了啊,这就是if 里面print展示的。当层数大于1的时候,就需要用到else里面的代码了。不存在你说的那种先执行if里面的,再执行else里面的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-31 22:50:19 | 显示全部楼层
vpo1 发表于 2016-5-31 15:51
并不是先执行if n == 1例的print,再执行else里的print。n是层数,当只有1层也就是n==1的时候,要从a移动 ...

我也知道不会先执行if ==1    可是每次都会用到 【-->】这个啊      所以我就弄不懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-1 12:53:53 | 显示全部楼层
-->只是展示移动步骤,a-->c,代表从a移动到c。也就是说,不论是只有一层,还是有多层,第一步都是a-->c。自己找个实物试验一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-13 22:56:38 | 显示全部楼层
网上有个二叉树的例子,汉诺塔的,你看下那张图就有点明白了,其实在挪动最后一个盘子到Z轴的前后,前面‘每次递归’都是Y,Z的互换,后面都是X,Y的互换
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-21 04:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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