一个C语言问题 关于fun()的用法

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

最后输出结果是 1 3 6
我看不懂类
他依次执行fun(6),fun(3),fun(1),执行fun(6)的时候调用fun(3),执行fun(3)时调用fun(1)
最后输出的x值怎么会是1 3 6呢
求高人解答 详细一些 多谢

fun(6)的时候调用fun(3),执行fun(3)时调用fun(1),这没有错。

fun(6)的时候调用fun(3),
执行fun(3)时调用fun(1)
执行fun(1)时打印“1”
继续执行fun(3)的后续:打印“3”
继续执行fun(6)的后续:打印“6”

所以就是1 3 6

如果改写fun函数为
fun(int x)
{
printf("%d ",x);
if(x/2>0) fun(x/2);
}
那么结果就是6 3 1了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-24
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
可以写为
fun(int x)
{ if(x/2>0) fun(x/2);
else printf("%d ",x);
}
你画一下流程图
如果x/2>0,那么x=x/2,否则输出x的值 。

学习c语言,当不懂的时候,一定要配上流程图,一目了然了。
第2个回答  2010-03-24
执行fun(1)后,直接执行printf("%d",x),此时x=1;然后回到fun(3),同样执行输出
此时x=3,最后回到fun(6),显然x=6;
第3个回答  2010-03-24
你注意一下,你的程序在运行的时候是先运行fun(6),但是它不会立刻得到结果,他会调用fun(3),然后是fun(1),所以先得出结果的是fun(1),懂了吗?
第4个回答  2010-03-24
这是一个递归的例子,因为输出在递归语句之后,所以是先输出的fun(1)。
相似回答