[求助]请教一道递归函数的题目
fun(int x){ if(x/2>0) fun(x/2-2);
printf("%d",x);
}
main()
{ fun(20);
printf("\n");
}
程序的运行结果是 -1 2 8 20
fun(20)=fun(8)=fun(2)
然后怎么办?
递归过程:
f(20)
{
f(8);
{
f(2);
{
f(-1);
{
函数递归结束;
printf("-1");
}
primtf("2");
}
primtf("8");
}
primtf("20");
}
/*每个递归函数都由子函数调用和本身的其他语句组成.这些都要一步一步执行完.*/
fun(int x)
{ if(x/2>0) fun(x/2-2);
printf("%d",x);
}
fun(int x)
{ if(x/2>0)
{
fun(x/2-2);
printf("%d",x);
}
}
注意两者的区别
当-1为参数传进去的时候,由于-1/2<0,所以不会继续递归下去,于是转而执行下一个语句,即输出-1.因此不是说f(-1);不会执行.
f(-1)
{
(-1/2<0)不成立,所以不会继续递归.
printf("-1"); //但这个还是会执行的.
}
没人能回答我吗?