hanoi塔c语言是怎么运行的,有哪位大神可以详细的给我解释一下C语言hanoi塔问题中参数具体是怎样传递的,详情如下:...

有哪位大神可以详细的给我解释一下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)什么意思啊?

自己对照下

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值