c语言递归函数调用

fun(int x)
{ if(x/2>0) fun(x/2-2);
printf("%d ",x);
}
main()
{fun(20);
printf("\n");
}
程序运行结果是-1 2 8 20
我理解的fun连续递归调用后,只输出最后一个x的值,为什么之前的x的值能被输出呢?

假设把其中2次递归调用展开,就如下面这样:

fun(20)
{
if(20/2>0)
{
if(8/2 > 0)fun(2); /* 这里展开fun(20/2-2)*/
printf("%d",8); /* 每个fun调用都会调用一次printf() */
}
printf("%d",20);
}

所以展开多少次,printf就会执行多少次。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-15
你把fun(int x)改成这样就行了,只得到-1

int fun(int x){

if(x/2<0) return x;

fun(x/2-2);

}

main() {

int x = fun(20);

printf("%d\n",x);

}

你想在fun里输出,就要加额外的判定条件,规定大于0的都不输出

fun(int x){

if(x/2>0) fun(x/2-2);

if(x/2-2 <0)

printf("%d ",x);

}

main() {

fun(20);

printf("\n");

}
第2个回答  2008-12-15
你的是每次循环里printf("%d ",x)
所以全输出了 改成这样
fun(int x)
{ if(x/2>0) fun(x/2-2);
}
main()
{fun(20);
printf("%d ",x);
printf("\n");
}
第3个回答  2008-12-15
好象在主函数里还少条件!
第4个回答  2008-12-15
只要调用fun函数就会有个printf,你看看你调用了多少次

相关了解……

你可能感兴趣的内容

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