首先你要明白,C语言表达式的结果是会自动转化的
因为x是int类型
所以 7/3=3 而不是3.5 3/2=1而不是1.5
(不是按照四舍五入法则,即便结果是2.99取整后一样是2)
所以x=3调入fun函数,if已经不成立(1>1不成立啊)。
还有一点要纠正你的是不是说函数返回了就一定是返回到main函数。
而是返回到调用它的地方,继续执行函数没有执行完的语句
我帮你分析下执行过程吧:
首先
这是main函数区域
{
fun(7); 1
printf("\n"); 2 //这里输出回车
}
x=7调入fun函数时的结果
{
满足if条件执行
fun(3); 3
printf("%d",x); 4 //这里输出7
}
x=3调入fun函数时的结果
{
//不满足满足if条件直接执行printf语句
printf("%d",x); 5 //这里输出3
}
先执行1,3,5.当执行完5后,函数返回到3处继续执行4,然后输出7
完了之后再返回到2处。然后输出回车
递归函数的调用顺序和返回顺序是相反的,这点要记住。
懂了吧???
调用函数里的printf是在你递归结束的时候才运行的呀。 x的值一直是7是没有改变的呀。 当x=7的时候 x/2=3作为递归的参数传进去 但x还是7是没变的呀。 f(3)时 3/2>1不成立 所以执行printf("%d",x)
因为把3做参数所以这个x是等于3的 输出了3 然后递归返回 输出了第一次递归的 x=7的那个 所以是3和7
3/2 他不大于1
这是递归调用,从后面才开始调用printf