| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 651 人关注过本帖
标题:汉诺塔问题....不是太明白
只看楼主 加入收藏
spider1987
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2007-2-18
结帖率:100%
收藏
 问题点数:0 回复次数:9 
汉诺塔问题....不是太明白
#include "stdio.h"
int main(void)
{
void hannoi (int n,char one,char two,char three);
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("the step to moveing %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);;
}

这个是谭浩强 第三版书
P176的例题...但是我写在C-FREE上没编译成功.....而且我看不懂程序是如何运行的
请高手们指点指点.....
搜索更多相关主题的帖子: 汉诺塔 char void int 
2007-04-20 13:22
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 

给改了一下,不知道改错了没?
#include "stdio.h"
void hanoi (int n,char one,char two,char three);
int main(void)
{
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("the step to moveing %d diskes:\n",m);
hanoi(m,'A','B','C');
return 0;
}
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);
}


~~我的明天我知道~~
2007-04-20 13:30
spider1987
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2007-2-18
收藏
得分:0 
这次是对的....
能麻烦给我解释一下程序是如何运行的吗?我看不很懂
2007-04-20 13:35
spider1987
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2007-2-18
收藏
得分:0 
比谭浩强书里
多了个return 0;
是这样吧?
我刚开始学函数,还不太懂
2007-04-20 13:36
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
递归本身就不容易懂
函数调用自身时,就把他当成调用其他函数一样理解!不要受自己调用自己这个现象的影响。。。

2007-04-20 14:17
spider1987
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2007-2-18
收藏
得分:0 
还是搞不很懂- -递归和以前那些题不一样...那些题想一想就知道程序是怎么运行的
这个想了半天也没明白
2007-04-20 14:42
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
能看懂这个不:

int CalAge(int n)
{
if(n==0)
{
return 8;
}
else
{
return CalAge(n-1)+1;
}
}

2007-04-20 15:25
spider1987
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2007-2-18
收藏
得分:0 
return 8;的意思是???把8返回到 calage(int n)里?
return calage(n-1)+1 的意思就是返回 calage(n-1)+1的值了?
比如 n=1
calage(int n)
就是1了.....
如果n=0
那就是0
这样理解对不对?
不过我感觉不是很对.....
2007-04-20 15:32
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
呵呵,肯定是错的,如果按你这样说,那if(n==0)有什么用呢?
你看看这个:

int CalAge(int n)
{
if(n==0)
{
return 8;
}
else
{
int re= CalAge(n-1)+1;
return re;
}
}

有0到m个人,满足第n人比第n-1年龄大1岁,另外已知第0人年龄是8岁,求出第x个人年龄计算的函数,就是上面的结果


2007-04-23 09:13
wen1000
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-4-5
收藏
得分:0 
我这也不懂???????????????
2007-04-23 18:13
快速回复:汉诺塔问题....不是太明白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019103 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved