递归运行顺序问题
/*汉诺塔*/#include <stdio.h>
void HAOyi(int n,char x,char y,char z)//语句5
{
if(n==1)//语句1
{
printf("\t%c-->%c\n",x,z);
}
else
{
HAOyi(n-1,x,z,y);//语句2
printf("\t%c-->%c\n",x,z);//语句3
HAOyi(n-1,y,x,z);//语句4
}
}
int main(void)
{
HAOyi(3,'X','Y','Z');
return 0;
}不知道递归的运行顺序,能否用例如(语句:2-->3-->4-->5……)的形式来讲解一下
请参考 大致画了一下,按顺序写了,不画箭头了:1,2,1,2,1,3,4,1,4,3,4,1,2,1,3,4,1,4,4
不知道对不对 简单做了个图示,可能更好理解 atai0622 发表于 2021-3-17 18:46
简单做了个图示,可能更好理解
~~~~~~~~~~~~~~~~~~~费心了~~~~~~~~~~~~~~~~~~~
{:10_256:}{:10_256:} atai0622 发表于 2021-3-17 18:46
简单做了个图示,可能更好理解
感觉是先把 八戒253 发表于 2021-3-17 19:35
感觉是先把
HAOyi(n-1,x,z,y);
printf();[/code
这个执行完之后再执行下面的这个HAOyi(n-1,y,z,x); 八戒253 发表于 2021-3-17 19:37
HAOyi(n-1,x,z,y);
printf();[/code
对啊,应该是,我画的不是么…… {:10_272:} atai0622 发表于 2021-3-17 22:08
对啊,应该是,我画的不是么……
加个好友呗,亲爱的鱼油!一起学习,一起进步! 加过了,我也是新手,大家多交流,共同进步哈 这个递归的运行顺序大致是:输入的数据不是3嘛,就说明汉洛塔有三层。主函数主要就是定义三座不同的岛屿。而在自定义函数中,就是由输入塔的层数来判断其要进行的步骤。当只有一层时,直接把x岛上的塔移到z岛就ok了,一旦其层数大于1,就要借助辅助塔来完成这个过程,这是为了满足塔要从下至上是一个由达到小的顺序。输入的·数据不是三嘛,那就是有三层塔,首先我们移动最上面的那一个塔,把它从x移动到y,这是为了给比它大的塔层让出位置,然后再把x上剩下的最上面那一个移动到z,然后我们需要的是把最大的那个塔放在z的最下面,但是现在z塔已经有了一个塔,所以我们要让z塔空出来,而y上面的那个就可以移动到x上,刚好满足题目要求,那么我们的y就空出来了,可以把在z上面的塔移动到y上面,再就可把x最上面的那个塔移动到y上,满足题目要求,最后就可以把x上面不最大的那个塔移动到z上,把y上面的小塔移动到x上,把y下面的塔移动到z上,最后一步,就是把x上的塔移动到z上面,ok,完工。我觉得在这个代码里面最核心的就是这几句,再就是一个递归循环。
HAOyi(n-1,x,z,y);//语句2---把x上的塔借助z移动到y上
12. printf("\t%c-->%c\n",x,z);//语句3---输出要执行的步骤:有了上一步的铺垫,就可以把x上面最大的那一个直接移动到z了
13. HAOyi(n-1,y,x,z);//语句4---把y上的塔借助x移动到z。
一直迷失的海豚 发表于 2021-3-24 22:30
这个递归的运行顺序大致是:输入的数据不是3嘛,就说明汉洛塔有三层。主函数主要就是定义三座不同的岛屿。 ...
谢谢啦!
页:
[1]