鱼C论坛

 找回密码
 立即注册
查看: 2017|回复: 5

[已解决]汉诺塔问题看下谢谢

[复制链接]
发表于 2018-4-21 21:15:13 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 卯乐 于 2018-4-21 21:31 编辑

关于递归的else不太懂


#include<stdio.h>
void move(char a,char b)
{
     printf("%c->%c\n",a,b);
}
void han(int n,char a,char b,char c)
{
     if(n>0)
     {
         han(n-1,a,c,b);
         move(a,b);
         han(n-1,c,b,a);
     }
}
int main()
{
     int n;
     scanf("%d",&n);
     printf("%d\n",(1<<n)-1);
     han(n,'A','B','C');
     return 0;
}        
最佳答案
2018-4-21 21:45:16
汉诺塔一共分为三个步骤,第一步把n-1的盘子借助C放到B,第二部把A挪到C,第三部把B上面的N-1个盘子借助A挪到C。仔细看递归调时ABC的位置,你会发现和汉诺塔的三个步骤时一样的。这个问题感觉说不清楚,只能靠个人理解,我刚开始学到这里的时候也没听明白老师怎么讲的。后来感觉理解的多一些了,主要还是要理解递归的思想。比如只有五个盘子,第一步你要借助C把四个盘子挪到B。而这第一步你也可以分解成三步,第一步把三个盘子借助B挪到C,然后这还能分解成三步。。。有一个规律是如果盘子是奇数的,则第一个盘子先挪到C,如果是偶数第一个盘子则先挪到B。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-21 21:45:16 | 显示全部楼层    本楼为最佳答案   
汉诺塔一共分为三个步骤,第一步把n-1的盘子借助C放到B,第二部把A挪到C,第三部把B上面的N-1个盘子借助A挪到C。仔细看递归调时ABC的位置,你会发现和汉诺塔的三个步骤时一样的。这个问题感觉说不清楚,只能靠个人理解,我刚开始学到这里的时候也没听明白老师怎么讲的。后来感觉理解的多一些了,主要还是要理解递归的思想。比如只有五个盘子,第一步你要借助C把四个盘子挪到B。而这第一步你也可以分解成三步,第一步把三个盘子借助B挪到C,然后这还能分解成三步。。。有一个规律是如果盘子是奇数的,则第一个盘子先挪到C,如果是偶数第一个盘子则先挪到B。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 22:03:54 From FishC Mobile | 显示全部楼层
这个汉字思想我明白就是代码的话有点不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 22:04:25 From FishC Mobile | 显示全部楼层
洛臻 发表于 2018-4-21 21:45
汉诺塔一共分为三个步骤,第一步把n-1的盘子借助C放到B,第二部把A挪到C,第三部把B上面的N-1个盘子借助A挪 ...

这个汉字思想我明白就是代码的话有点不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 22:29:29 | 显示全部楼层
卯乐 发表于 2018-4-21 22:04
这个汉字思想我明白就是代码的话有点不懂。

单步调试调试你就明白了,看看与你设想的一不一样,不一样的琢磨琢磨为什么,慢慢的就好了,这需要时间,刚学到这个我也不懂,后来慢慢的不知道怎么的理解就越来越深了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-22 13:43:13 From FishC Mobile | 显示全部楼层
嗯,知道了。不过没电脑,想买个2000以下二手的笔记本,又怕用不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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