鱼C论坛

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

函数递归中的汉诺塔

[复制链接]
发表于 2013-4-3 21:30:39 | 显示全部楼层 |阅读模式

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

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

x
void main()
{
void hanoi(int n,char one,char two,char three);
int m;
printf("input the number of diskes:");
scanf("%d",&m);
  printf("the step to moving %d diskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one,char two,char three)
{
void move(char x,char y);
if(n==1)
{
  move(one,three);
}
else
{
hanoi(n-1,one,three,two);
  move(one,three);
  hanoi(n-1,two,one,three);这里是怎样执行的

}
}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-3 23:26:51 | 显示全部楼层
我也正纠结这个问题@
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-4 15:18:48 | 显示全部楼层
{:7_167:}个人感觉比较抽象,
你可以试着先举3.4个盘子的例子,
递归的时候参数都在不断变化的。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-4 17:32:40 | 显示全部楼层
基本意思就是:假设你已经知道n-1个盘子如何移动,你是否能在此基础上描述n个盘子如何移动。
当然,当调用n-1个盘子的问题的时候,就会假设已经知道n-2个盘子如何移动...
这样不停地化归下去,所以该函数要有一个基本终结的条件,就是:
if(n==1) {
  ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-4 18:11:11 | 显示全部楼层
现在还没有 同,等心情舒畅的时候再来看看!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-4 15:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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