以下程序的输出结果是_____

#include<stdio.h>
void fun(int x)
{if(x/2>0)fun(x/2);
printf("%d",x); }
main()
{fun(3);printf("\n");}

输出结果为:【13】,其实输出了两个数,【1】和【3】,因为程序没有分隔符,看起来就像是一个数了。
理由:主函数中调用fun()函数
参数是3,则判断3/2是大于0,再一次调用fun();
参数是1,1/2=0,此时if不成立,输出之前的x,【就是1】!!!
此时,不再进行深入的嵌套,而是从嵌套中出来
再出来的过程中,又输出了一次,就是之前的3,【就是3】!!!

【验证程序】
#include<stdio.h>
void fun(int x)
{
if(x/2>0)fun(x/2);
printf("%d==",x);
}
void main()
{
fun(3);
printf("\n");
}

希望你懂了o(∩_∩)o
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-06
#include<stdio.h>
void fun(int x)
{if(x/2>0)fun(x/2); // 3/2=1(整数)所以调用fun(x/2),即调用fun(1),打印1;1/2=0所以不再递归调用
printf("%d",x); }//打印x,即3
main()
{fun(3);printf("\n");}

最后结果 输出1 3
第2个回答  2012-09-06
输出结果为:1追问

理由

追答

fun(3) 因为3/2>0,执行if(x/2>0)fun(x/2);又因为3/2=1 即执行fun(1);
因为1/2=0,所以执行printf("%d",x);,即打印1.

第3个回答  2012-09-06
1 3
相似回答
大家正在搜