有哪位大神可以详细的给我解释一下C语言hanoi塔问题中参数具体是怎样传递的,详情如下:
答案:2 信息版本:手机版
解决时间 2019-10-07 02:14
已解决
2019-10-06 07:27
这是从网上找到的一篇写的不错的讲解hanoi塔问题的文章(只截取了我想问的那部分)
int hanoi(int n, char one, char two, char three)
{
int move(char x, char y);
if(n==1) ************** 1
{
move(one,three); ************** 2
}
else ************** 3
{
hanoi(n-1, one, three, two); ************** 4
move(one, three); ************** 5
hanoi(n-1, two, one, three); ************** 6
}
return 0;
}注释部分:
当n=2时,hanoi参数为hanoi( 2, A, B, C).
进入到3中, 首先执行4, hanoi函数此时的参数为hanoi( 2-1, A, C, B), 即hanoi( 1, A, C, B)
进入第二层hanoi函数中, 此时的hanoi参数为hanoi( 1, A, C, B), n=1, 所以进入到第二层的1中,
执行2, 打印结果为 A-->B
第二层结束, 回到第一层, 第一层的hanoi参数为hanoi( 2, A, B, C), 因为刚刚在第一层中执行的是4,
所以现在就执行5, 打印结果为A-->C.
然后执行6, 所有此时hanoi参数又变为了hanoi( 2-1, B, A, C), 即hanoi( 1, B, A, C),
再次进入到第二层hanoi函数中, 此时的hanoi参数为hanoi( 1, B, A, C), n=1. 所以再次进入到1中,
执行2, 打印结果为 B-->C.
第一层结束,最后打印结果为
A-->B
A-->C
B-->C
我很不明白的就是主函数中的'a' 'b' 'c' 在传递给下面时具体怎么回事,照他这么讲,那不应该是three始终对应C吗?请大神帮忙解决这个问题,多谢,有加分!
最佳答案
2019-10-06 07:38
完成圆盘移动过程只需要三部就行了
当n 大于2时,移动过程可以分解为三步;
第一步,把A上的n-1个圆盘移动到C上;
第二步,把A上的一个圆盘移动到C上;
第三步 ,把B上的n-1个圆盘移动到C上。
其中第一步和第二步是类同的
当n=3时,第一步和第三步又分解为类同的三步
建议还是去看看函数的递归调用,本程序就是在递归调用中最经典的一个
全部回答
1楼
2019-10-06 08:38
这叫递归,当n=3时执行了hanoi( n - 1, one , three, two );
这时你再想想一下看好哦
执行 hanoi( n - 1, one , three, two );
n=3 one=a two=b three=c
进入函数内咯
hanoi( int n, char one, char two, char three )
对照一下吧n=2 one=a two=c three=b
你别把形参和实参搞混了,这样说你会比较容易懂
char three='c';
有个函数int a(char one){里面随便是什么};
你说a(three)什么意思啊?
自己对照下
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯