递归函数中hannoi塔如何套嵌的

来源:百度知道 编辑:UC知道 时间:2024/06/21 03:21:33
void move(char x,char y)
{
printf("%c----->%c\n",x,y);
}
void hanoi(int n,char one,char two,char three)
⑴{
⑵if(n==1) {move(one,three);}
⑶else
⑷{
⑸hanoi(n-1,one,three,two);
⑹move(one,three);
⑺hanoi(n-1,two,one,three);
⑻}
⑼}
main()
{
int m;
printf("input the number of diskes");
scanf("%d",&m);
printf("the step to moving %3d diskes:\n",m);
hanoi(m,'a','b','c');
}

请问在当m=3时,
1.hanoi(2,one,three,two);
2.move(one,three);
3.hanoi(2,two,one,three);
然后套嵌1.hanoi(2,one,three,two);,为
4.hanoi(1,one,three,two);
5.move(one,three);
6.hanoi(1,two,one,three);
请问运行的顺序是怎样的啊?
是先执行4,套嵌会原函数运行move(one,three)吗?
请问帮我写下这个函数是如何一步步套嵌的好吗?最好写清每一步的序号哦,这个问题我已经晕死了呵呵,麻烦啦,为了表示谢意,小弟献上全部分数o(∩_∩)o,清高手指点,当m=3时这个程序是如何一步步运行的

调用顺序如下:
hanoi(3,a,b,c)
hanoi(2,a,c,b)
hanoi(1,a,b,c)
move(a,c)
move(a,b)
hanoi(1,c,a,b)
move(c,b)
move(a,c)
hanoi(2,b,a,c)
hanoi(1,b,c,a)
move(b,a)
move(b,c)
hanoi(1,a,b,c)
move(a,c)
end
一共挪动了7次,利害吧!这种小问题,7层的我都会,我这里有个自己编的能够显示出过程的网页做得汉诺塔程序,要了告诉我邮箱!