为了账号安全,请及时绑定邮箱和手机立即绑定

请问有个C的主函数运行顺序的一个问题

请问有个C的主函数运行顺序的一个问题

C
慕后端8527005 2018-01-03 11:10:58
#include<stdio.h>void fun(char c){ if(c>'x') fun(c-1); printf("%c",c);}main(){ fun('z');}这个程序跑到c=x之后为什么会打出yz??看不懂是怎么回事??
查看完整描述

2 回答

已采纳
?
慕用4063026

TA贡献195条经验 获得超115个赞

递归函数,估计你想不通的是fun函数这个运行过程,fun带入的第一值z>x执行语句fun(c-1)也就是y(此时不执行输出z的语句)。接着y>x继续执行fun(c-1)(此时不执行输出z的语句),也就是fun(x)不满足c>'x',执行输出语句x,结束fun(x)回到fun(y)执行输出y结束函数,回到fun(z)执行输出z

查看完整回答
反对 回复 2018-01-04
  • 慕后端8527005
    慕后端8527005
    那个。,请问打印x后怎么会执行fun(y)不是直接结束么????我比较蠢。。
  • 慕用4063026
    慕用4063026
    因为fun的yz函数并没有结束啊,你可以想象成一个盒子打开里面还有个盒子打开还有个盒子,打开最后一个盒子在从里往外关闭盒子
?
月薪过万只是梦

TA贡献4条经验 获得超2个赞

字符本身没有什么可比较的,if (c>'x')  z赋予给了c,会把z 和 x 按 ASCII码转换为十进制;

于是便是if (106>104)  fun(106-1); fun(105)又会逐次运行,看出这是一个递归函数;

条件是到x (即104)便结束。

所以105,106又会按照ASCII码表转换回字符 y,z

查看完整回答
反对 回复 2018-01-04
  • 慕后端8527005
    慕后端8527005
    他打印了x之后,是怎么返回把yz打出来???不是打印了就终止么?
  • 月薪过万只是梦
    月薪过万只是梦
    不好意思ASCII码表转换说错了, X,Y,Z应该是转换成88,89,90; 递归函数会逐次运行到符合结束的条件,有点循环语句的味道; 你对递归函数不太理解,请看下http://www.imooc.com/code/5504
  • 2 回答
  • 0 关注
  • 1293 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信