【C语言】函数递归问题,题目见图片,答案为什么是D?求解!为什么是倒着输出的?!

如题所述

递归函数式自己调用自己,那么那个函数会一直执行到某个特定满足的条件的时候,才会从里面忘外面返回啊
比如就是f(f(f(3)));
进去之后,是从最里层的函数返回吧,那么就是倒着了
如果用再具体一点,就是堆栈的先进后出了,上一级的函数的东西都在底下,只有最后一层的在栈顶
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-06-17
由于子函数调用在printf()语句之前,所以得到符合条件(x/2>0)为假时,才能跳过fun()调用,
执行printf()语句;而啥时候符合呢,请看程序运行:
第一次调用fun()时x=20,x/2=10>0,所以继续调用fun(8);
x=8,x/2=4>0,所以继续调用fun(2);
x=2,x/2=1>0,继续调用fun(-1);
x=-1,x/2<0;此时if语句条件为假,执行printf() 输出-1,
然后返回上级,仍然执行printf(),而此时x=2,输出2
然后返回上级,仍然执行printf(),而此时x=8,输出8
然后返回上级,仍然执行printf(),而此时x=20,输出20
第2个回答  2014-06-17
这个是递归啊 碰到函数了 当然函数先执行 所以 输入20
->fun(8)
->fun(2)
->fun(-1) -1不满足判断条件
->执行 printf -1
->返回到上层 printf 2
依这种思路运行 所以倒序输出哦
第3个回答  2014-06-17
这就是递归啊。在fun(20)里面调用fun(18), fun(18)不执行完,fun(20)中的printf不会执行,fun(18)里面调用fun(7), fun(7)不执行完,fun(18)中的printf不会执行。以此类推。就可以理解了
第4个回答  2014-06-17
fun(20)
{
if(20/2>0)
fun(8)
{
if(8/2>0)
fun(2)
{
if(2/2>0)
fun(-1)
{
printf("%d ",-1);
}
printf("%d ",2);
}
printf("%d ",8);
}
printf("%d ",20);
}

递归解释起来还挺麻烦的,我把递归展开了,就如上,函数从上往下执行,就分别输出 -1 2 8 20了
再加上花括号
相似回答