c语言,以下程序的输出结果是?

题目:
void fun ( int x )
{ if ( x/2 > 0) fun (x/2) ;
printf(" %d", x);
}
main()
{ fun(3) ; printf("\n") ; }
问题:
1、结果是多少?
2、求具体的解题步骤。

输出
1 3
这是递归了,所以先是fun(3),进入后发现3/2=1,所以又继续func(3/2),也就是fun(1),进入发现1/2=0,就执行prinft,输出1,然后fun(1)就返回了;返回出去正好是fun(3)的prinft,输出3

进入fun(3)
进入fun(1)
输出1
退出fun(1)
输出3
退出fun(3)追问

”然后fun(1)就返回了;返回出去正好是fun(3)的prinft,输出3“
这一句看不懂,fun(1)返回到哪里了?什么叫返回出去正好是fun(3)的prinft?有两个printf啊?到底是哪一个?

追答

main()
{
fun(3);//进入fun(3)
//以下在fun(3)函数中
if(3/1>0) fun(1);//条件为真,进入fun(1)
//以下在fun(1)函数中
if(1/2>0)fun(0);//条件不为真,不会执行fun(0)
printf(" %d", 1);
//fun(1)结束
printf(" %d", 3);
//fun(3)结束
printf("\n") ;
}

函数返回到调用它的地方,从哪里开始,在哪里结束;
由于fun()函数是返回值是void,就没有返回值了,直接结束了。如果有返回值,比如int fun(),那就会在结束时返回一个int值。
在有返回值的情况下,如果单纯的执行fun(),那么返回值就相当于丢弃了;如果形如a=fun();,那么a就会接收到返回值。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-24
fun(3); 进入 fun()函数时
x = 3
x/2 ==1 大于0; 于是递归调用函数,递归调用前x 的值为3

fun(x/2) 即 fun(1); 此时进入fun函数,调用fun(1)时 ,1/2 ==0 不大于0 故直接打印x的值,此时x =1

然后 递归调用fun函数 之前 x的值 3,打印输出

最后结果为:空格1空格3
第2个回答  2012-08-24
1 3
fun(3)

3/2=1>0转到fun(1)
1/2=0往下继续输出1
然后返回上层,输出3追问

什么叫返回上层?上层是哪里?

第3个回答  2012-08-24
1 3 这是一个函数递归调用。
fun(3) 3/2=1 调用fun(3/2)---fun(1) 1/2>0不成立,输出1,返回,再输出3
相似回答