| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:汉诺塔程序执行看不明白,求助!!
取消只看楼主 加入收藏
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
结帖率:100%
收藏
 问题点数:0 回复次数:2 
汉诺塔程序执行看不明白,求助!!
move(int n,int x,int y,int z)
{
 if(n==1)
   printf("%c-->%c\n",x,z);
 else
  {
   move(n-1,x,z,y);
   printf("%c-->%c\n",x,z);
   move(n-1,y,x,z);
  }
}
main()
{
 int h;
 printf("\ninput number:\n");
 scanf("%d",&h);
 printf("the step to moving %2d diskes:\n",h);
 move(h,'a','b','c');
}
这是汉诺塔的源码,算法我明白,但用程序表示却云里雾里了,假设n=1,那么直接打印a->c,实参与形参对应一致,但是n=2时,执行move(n-1,x,z,y);实参与形参对应发生了变化,但是调用自己什么呢?调用n=1么?那么不就是a->c么?
哪位能以n=2时程序如何执行的详细解释下么?谢谢了
关于n!的递归调用我还能明白,这个递归调用我关键是都不知道调用什么。。。真是羞愧啊

[ 本帖最后由 account 于 2010-4-17 22:53 编辑 ]
搜索更多相关主题的帖子: 汉诺塔 
2010-04-17 22:52
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
哪位清楚的能否赐教,谢谢了
2010-04-18 00:10
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
以下是引用草狼在2010-4-18 00:29:30的发言:

n=2的时候调用move函数
此时n=2,x='a',y='b',z='c';
然后判断(n==1)不符合
就调用MOVE函数
此时n=1 x='a',y='c',z='b';(但ELSE中还是x,y,z值都没发生变化还是x='a',y='b',z='c')
然后判断(n==1)符合
输出a->b;
然后是执行ELSEZ中的PRINTF();
输出a->c
然后再printf后面的MOVE函数
此时n=1,x='b',y='a',z='c';
然后判断(n==1)符合
输出c->b;最后代码运行结束
对与n=2按照您的解释,完全明白,再调用过程中,实参与形参对应发生了改变,输出也随之不同,但是对于n=3呢?
我如果也这样理解,
n=3,x='a',y='b',z='c';
然后判断(n==1)不符合
就调用move函数
此时n=2 x='a',y='c',z='b'//是这样对应吗?
然后判断(n==1)不符合
就再次调用move函数
此时n=1 x='a',y='c',z='b'
然后判断(n==1)符合
接下去就输出a-->bl了??这样就错了啊。。。
我哪里理解出现问题了呢?
2010-04-18 01:29
快速回复:汉诺塔程序执行看不明白,求助!!
数据加载中...
 
   



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

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