#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教你。
如果你想表示一个很小的数最简单的办法就是直接写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
}本回答被提问者采纳
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