(12)以下程序的输出结果是 【】 。 #include <stdio.h> void fun(int x)

{
if(x/2>0) fun(x/2);
printf("%d",x);
}
main()
{
fun(3);printf("\n");
}
答案是13,求解释

这是递归调用,13是打印了二次。
第一次,打印1
第二次,打印3

第一次调用 fun(int x)
x为3 条件满足:if(x/2>0) fun(x/2);
第二次进入fun(int x)
x为1 这时不再满足 if(x/2>0)
执行:printf("%d",x); 这时打印1
退出第二次进入的fun(int x)
执行第一次进入fun(int x)的printf("%d",x); 这时打印3
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-31
递归调用。fun(3)调用fun(1),fun(1)执行时输出1,fun(1)执行完成后返回fun(3)执行,输出3。因此总的输出:13。
第2个回答  2011-07-31
答案是1,3!第一次调用fun时x=3则x/2=1,if条件为真,再次调用fun,这时参数为x/2=1即fun(1);
则x/2=0;if条件不成立执行printf语句,即输出1,然后返回,再执行第一次调用的fun的下一条语句即使printf,输出3;所以结果为13