鱼C论坛

 找回密码
 立即注册
查看: 4453|回复: 12

[已解决]递归运行顺序问题

[复制链接]
发表于 2021-3-17 10:39:45 | 显示全部楼层 |阅读模式
10鱼币
  1. /*汉诺塔*/
  2. #include <stdio.h>
  3. void HAOyi(int n,char x,char y,char z)//语句5
  4. {
  5.     if(n==1)//语句1
  6.     {
  7.         printf("\t%c-->%c\n",x,z);
  8.     }
  9.     else
  10.     {
  11.         HAOyi(n-1,x,z,y);//语句2
  12.         printf("\t%c-->%c\n",x,z);//语句3
  13.         HAOyi(n-1,y,x,z);//语句4
  14.     }
  15. }
  16. int main(void)
  17. {
  18.     HAOyi(3,'X','Y','Z');
  19.     return 0;
  20. }
复制代码
不知道递归的运行顺序,能否用例如(语句:2-->3-->4-->5……)的形式来讲解一下

最佳答案
2021-3-17 10:39:46
请参考

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-17 10:39:46 | 显示全部楼层    本楼为最佳答案   
请参考
Snap1.jpg
Snap2.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-17 14:15:54 | 显示全部楼层
大致画了一下,按顺序写了,不画箭头了:1,2,1,2,1,3,4,1,4,3,4,1,2,1,3,4,1,4,4
不知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-17 18:46:07 | 显示全部楼层
简单做了个图示,可能更好理解

简单画了一下,按照顺序标了序号,不知道对不对,请各路大佬指教

简单画了一下,按照顺序标了序号,不知道对不对,请各路大佬指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-17 19:22:33 | 显示全部楼层
atai0622 发表于 2021-3-17 18:46
简单做了个图示,可能更好理解

~~~~~~~~~~~~~~~~~~~费心了~~~~~~~~~~~~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-17 19:35:56 | 显示全部楼层
atai0622 发表于 2021-3-17 18:46
简单做了个图示,可能更好理解

感觉是先把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-17 19:37:43 | 显示全部楼层

[code]HAOyi(n-1,x,z,y);
printf();[/code

这个执行完之后再执行下面的这个HAOyi(n-1,y,z,x);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-17 22:08:53 | 显示全部楼层
八戒253 发表于 2021-3-17 19:37
[code]HAOyi(n-1,x,z,y);
printf();[/code

对啊,应该是,我画的不是么……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-18 09:53:03 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-18 14:24:45 | 显示全部楼层
atai0622 发表于 2021-3-17 22:08
对啊,应该是,我画的不是么……

加个好友呗,亲爱的鱼油!一起学习,一起进步!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-18 17:09:54 | 显示全部楼层
加过了,我也是新手,大家多交流,共同进步哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-24 22:30:31 | 显示全部楼层
这个递归的运行顺序大致是:输入的数据不是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。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-26 17:15:49 | 显示全部楼层
一直迷失的海豚 发表于 2021-3-24 22:30
这个递归的运行顺序大致是:输入的数据不是3嘛,就说明汉洛塔有三层。主函数主要就是定义三座不同的岛屿。 ...

谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 16:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表