weixin_71072405 2022-07-11 02:25 采纳率: 0%
浏览 37

这个为什么可以逆序输出呀?

这个函数可以让p逆序输出,为什么呀?救命,求解答!

void fan(char*p,int i)
{
if(p[i+1]!='\0')
fan(p,i+1);
printf("%c",p[i]);
}

  • 写回答

5条回答 默认 最新

  • 私房菜 移动开发领域优质创作者 2022-07-11 09:57
    关注

    你提的这个问题还是很好的,这个是个经典的递归调用,理解完这个函数,那么你的递归函数就基本没问题了。。。。
    我们在学习C 语言函数调用的时候,只是看到一行一行的调用,但是程序在编译成机器码之后才能运行的,如果你学过汇编就可以知道,遇到函数调用之后,机器码会为了产生一个跳转。
    例如,你这个函数当if 成立之后会再次进入fan(),那么这就会jump 到函数fan 的地方继续执行,这样下去,每次if 进来都会进入fan 地址进行运行(当然每次的参数都是不同的)。当你一直到最后一次fan(),发现if 无法满足了,那么只好打印这一次fan() 的最后一个函数跳转,即printf 函数跳转。这里是你程序的第一次打印哦。。。

    以此类推,当最后一次fan() 跳出回到上一次跳转地方就会发现倒数第二次的fan() 中还有个printf。。。。以此类推。。。一直到第一次fan() 的printf执行。。。。
    所以,当你运行的时候就会发现是倒序输出。。。。
    希望对你有帮助,很高兴你加入C 语言大家庭,有问题欢迎随时交流。。。。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月11日

悬赏问题

  • ¥60 用r语言进行数据分析
  • ¥20 关于游戏c++语言代码问题
  • ¥15 如何制作永久二维码,最好是微信也可以扫开的。(相关搜索:管理系统)
  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。