木地板效果图:C的递归问题

来源:百度文库 编辑:高考问答 时间:2024/04/19 16:27:19
fun(int x)
{if(x/2>0) fun(x/2);
printf("%d ",x);
}
main()
{fun(6);}
谁能解释一下啊?

fun(6): 执行fun(3) ;第1次遇到 printf(x=6)
fun(3): 执行fun(1) ;第2次遇到 printf(x=3)
fun(1): 不满足if(x/2>0),跳过fun()语句,执行printf(x=1); 到此fun(1)执行完毕
跳转到fun(3)中,执行第2次遇到的printf(x=3),到此fun(3)执行完毕,
跳转到fun(6),执行printf(x=6)
结束~~~~~~~

如果X/2大于0把X/2的值给fun()并输出当前X的值,接着继续走fun()函数,直到X=0为止第一回输出X=6,第二回X=3,第三回输出X=1(因为X是整型变量所以1.5取整X=1),再往下判断1/2时同上,此时X=0就不走判断语句了程序运行结束,输出结果:6,3,1

感觉输入的顺序应该是1,3,6应该在每次调用fun函数的时候,都需要把当前现场保护,所以在最后一次嵌套是1之后3,之后6 因为每次你更改的x都已下一个函数的局部变量。所以x在每次调用的过程中是在栈上面不同的地方分配的。