| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1198 人关注过本帖
标题:请教递归调用!!
只看楼主 加入收藏
我想要飞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2004-6-15
收藏
 问题点数:0 回复次数:11 
请教递归调用!!

下面这段程序是很常见的汉诺塔!但是我看了N久了 ,就是看不懂

请帮忙讲述一下流程!!

hanoi(int n,char x,char y,char z)

{

if(n==1)

printf("%c-->%c/n",x,z);

else

{

hanoi(n-1,x,z,y);

printf("%c-->%c/n",x,z);

hanoi(n-1,y,x,z);

}

}

它的流程是什么?先做哪条语句在做哪条语句请帮忙讲述

搜索更多相关主题的帖子: 递归 
2004-11-01 23:49
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
哈哈,太好了,我也没懂,上次好不容易找个讲解doc文档下来,竟然是pascal描述的,更晕了~~~
2004-11-01 23:53
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

自己用一个例子不就可以一点一点的看懂了么!

这玩意不好说,自己理解!


差点把你忘了...
2004-11-02 09:00
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

实际上很容易懂的。

hanoi(int n,char x,char y,char z);//说的是有n个盘子需要移动从x移到z,y为可以借助的

下面的是根据上面的函数的功能定义,进行逻辑分析 如果当n==1显然直接移动就可以了(if(n==1) printf("%c-->%c/n",x,z);)

反之,就要先把最下面盘子上面的所有盘子即n-1个盘子,先移到y上面当然要借助z所以有 hanoi(n-1,x,z,y);在这里进入了第归printf("%c-->%c/n",x,z);表示的是中间借助柱子的移动情况!!

好,现在最大的那个没动而n-1个已经移动到了y上面,z是空的,显然再把最下面的那个移到z上面啊!!就是n=1的情况了!!当然这时就从上面的那个第归开始返回了!!进入了下一条语句!如下:

最后的这条hanoi(n-1,y,x,z);很容易了就是把y上面的n-1个盘子移到z上面不就行了。

[此贴子已经被作者于2004-11-02 09:16:02编辑过]


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-02 09:13
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
收藏
得分:0 
我建议大家写一个非递归的过程实现它,不就理解了吗?
2004-11-03 19:53
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 
以下是引用时空之蕊在2004-11-02 09:13:36的发言:

实际上很容易懂的。

hanoi(int n,char x,char y,char z);//说的是有n个盘子需要移动从x移到z,y为可以借助的

下面的是根据上面的函数的功能定义,进行逻辑分析 如果当n==1显然直接移动就可以了(if(n==1) printf("%c-->%c/n",x,z);)

反之,就要先把最下面盘子上面的所有盘子即n-1个盘子,先移到y上面当然要借助z所以有 hanoi(n-1,x,z,y);在这里进入了第归printf("%c-->%c/n",x,z);表示的是中间借助柱子的移动情况!!

好,现在最大的那个没动而n-1个已经移动到了y上面,z是空的,显然再把最下面的那个移到z上面啊!!就是n=1的情况了!!当然这时就从上面的那个第归开始返回了!!进入了下一条语句!如下:

最后的这条hanoi(n-1,y,x,z);很容易了就是把y上面的n-1个盘子移到z上面不就行了。

呵呵 不错呀~~~~~~..................


点 鼠 标 , 救 饥 民 http://www./
2004-11-03 20:12
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
收藏
得分:0 
以下是引用mikewolf在2004-11-03 19:53:06的发言: 我建议大家写一个非递归的过程实现它,不就理解了吗?

汉诺塔都能用非递归写出来,那他肯定成为计算机业的名人了


欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-11-03 22:43
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
得分:0 
这汉诺塔有什么实际用处么

2004-11-03 23:43
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
可以的!!其实也不难把!!就是要数学比较好!!我记得我曾经看过!!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-04 20:10
我想要飞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2004-6-15
收藏
得分:0 

谢谢各位的帖子

但是我不是不懂计算的过程

而是不懂程序函数调用的流程!

请在程序中加点注释!!


个人宣言;黑暗的腹地,我睁开双眼, 世界哑口无言。。。
2004-11-06 00:20
快速回复:请教递归调用!!
数据加载中...
 
   



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

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