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就会执行多少次。
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");
}
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");
}
所以全输出了 改成这样
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,你看看你调用了多少次