为什么这个C语言程序的运行结果是:136

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

}
最后那个“}”是多打了的,谢谢!

写代码时最好能完整,并保持对称

#include<stdio.h>

void fun(int x)

{

   if(x/2>0)  

      fun(x/2);

   printf("%d",x);

}

main()

{

  fun(6);

  printf("\n");

}

   

我们一步一步分析:

①程序先执行

fun(6);

接着执行

②if(6/2>0)  

由于6/2>0 为真,  执行fun(6/2)

【注意,此时这一层调用里,fun的局部变量x==6】

也就是执行fun(3)

③执行if(3/2>0) 为真,执行fun(1)

【注意,此时这一层调用里,fun的局部变量x==3】

④执行if(1/2>0) 为假,跳过fun(1/2)

执行printf("%d",1);

⑤注意,这已经是第三次调用fun了,现在第三层fun结束,跳回到第二个fun的if结束后,输出printf,那个时候x==3,所以输出printf("%d",3)

⑥接着结束第二层fun调用,跳回到第一次调用fun。

⑦此时这一层的x==6

printf("%d",6);

⑧也就是依次为136

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-27
你可以这样想 fun(6)执行的顺序是先判定6/2>0成立 所以又执行了fun(6/2),也就是fun(3),而后输出x,也就是6,但是在fun(3)中又重复了上述步骤,因此其执行的顺序虽然是fun(6)>>fun(3)>>fun(1)但是输出的顺序是136本回答被网友采纳
第2个回答  2010-11-27
C语言当中运算符 ^ 是按位的异或运算,并不表示求幂运算!
如果你想表示一个很小的数最简单的办法就是直接写0.000001

或者使用pow函数,pow(底数,指数)
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
第3个回答  2010-11-27
递归是这样进行的
fun(6)
{
x/2=3,
fun(3)
{
x/2=1,
fun(1)
{
x/2=0
输出1
}
输出3
}
输出6
}本回答被提问者采纳
第4个回答  2010-11-27
是1,3,6

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网