c语言函数递归调用问题(请高手帮忙详细解释)
答案:1 悬赏:70
解决时间 2021-10-06 11:54
- 提问者网友:欲劫无渡
- 2021-10-05 19:40
c语言函数递归调用问题(请高手帮忙详细解释)
最佳答案
- 二级知识专家网友:骨子里都是戏
- 2021-10-05 20:55
确实,初学C的时候,汉诺塔的递归看起来确实是比较神奇的程序。
其中主要就在hanoi 这个递归函数,传的参数里面有一个n 代表是几层递归。
如果n=1 代表只有一个,move(one,three); 就是把第一个移到第三个就行了。否则
第一个柱子上有n个(n>1) 要移到第三个。需要把上面的n-1个移到第二个,最下面的一个移到第三个,再把第二个柱子上的n-1个移到第三个。 要这三个步骤。
其中,第一个,和第三个步骤,和本身其实是一样的。
就是把n-1个移到第二个,注意hanoi的参数
two 即第二个参数,这是表示用来借助的
就假设n=2 吧 hanoi(2,'A','B','C'); 变成了
hanoi(1,A,C,B); //这个代表A座上有一块,需要借助C座,移到B座
A--->C
hanoi(1,B,A,C); //这个代表B座上有一块,需要借助A座,移到C座
最后会输出
A-->B
A-->C
B-->C
假设n=3 hanoi(3,'A','B','C');
hanoi(2,A,C,B); //这个代表A座上有两块,需要借助C座,移到B座
A--->C
hanoi(2,B,A,C); //这个代表B座上有两块,需要借助A座,移到C座
A座上有两块,需要借助C座,移到B座 会输出
A-->C
A-->B
C-->B
B座上有两块,需要借助A座,移到C座 会输出
B-->A
B-->C
A-->C
其中主要就在hanoi 这个递归函数,传的参数里面有一个n 代表是几层递归。
如果n=1 代表只有一个,move(one,three); 就是把第一个移到第三个就行了。否则
第一个柱子上有n个(n>1) 要移到第三个。需要把上面的n-1个移到第二个,最下面的一个移到第三个,再把第二个柱子上的n-1个移到第三个。 要这三个步骤。
其中,第一个,和第三个步骤,和本身其实是一样的。
就是把n-1个移到第二个,注意hanoi的参数
two 即第二个参数,这是表示用来借助的
就假设n=2 吧 hanoi(2,'A','B','C'); 变成了
hanoi(1,A,C,B); //这个代表A座上有一块,需要借助C座,移到B座
A--->C
hanoi(1,B,A,C); //这个代表B座上有一块,需要借助A座,移到C座
最后会输出
A-->B
A-->C
B-->C
假设n=3 hanoi(3,'A','B','C');
hanoi(2,A,C,B); //这个代表A座上有两块,需要借助C座,移到B座
A--->C
hanoi(2,B,A,C); //这个代表B座上有两块,需要借助A座,移到C座
A座上有两块,需要借助C座,移到B座 会输出
A-->C
A-->B
C-->B
B座上有两块,需要借助A座,移到C座 会输出
B-->A
B-->C
A-->C
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯