void main()
{ int w=5;
void fun(int);
fun(w);
printf("\n");
}
void fun(int k)
{if (k>0) fun(n-1);
printf("%d",k);
}
求详细过程解答,答案是012345,为什么?
fun(k-1)不好意思打错了,其他没打错。
为什么有fun(5)呢?不是k-1吗?变成fun(4)然后输出K=5,为什么还要回去?可以详细解释下吗?为了考二级暑假自学C呢,函数这点有的地方看不懂。。。。。
追答自身调用自身所以并没执行printf而是再次执行了自身,如果不理解你可以尝试单步调试
追问哥哥 return 0 的意思是返回上一级吗就是返回fun(1)? 然后执行输出? return 1可以用在这里吗?
追答return 0是返回就不执行fun(0)的输出,这儿return 多少都没关系。你可以return 100,她的作用是不执行fun(0)的输出而已
-----------
fun(5){
fun(4){
fun(3){
fun(2){
fun(1){
fun(0){
return 0
}
printf..1
}
printf..2
}
printf..3
}
printf..4
}
printf..5
}
那个if语句不是如果大于0则调用自身吗?最后=0时为什么还调用了?5>0,调用 4也调用,到0了应该不调用啊?
追答到0没返回就会调用,所以要用return
追问谢谢,明白了,打了这么多,多送5分吧,谢谢你!!!
追答不用
本回答被提问者和网友采纳能在详细点,算法写下可以不
那是从If判断那里开始调用?先调用fun(5),然后判断变成了4,在返回if判断然后调用?
追答这个子函数只有两句话,一个是如果k>0则调用本身(并且k减去1),下面一句和上面的if没关系,只是打印当前k的值
当调用到k是0了,那么就不在调用本身,也就是if包含的语句不执行了,那么就执行下面的打印k
接着结束子函数,回到上一个调用的地方,那么接着就是执行打印了
以此类推,就是打印,结束调用。最后返回main,结束程序
当k=0时,不符合if了 那么不调用本身了,为什么输出还有0呢?应该输出12345啊
追答我不是说了,if和printf没有任何关系,只是上下文而已
k=0只是不再调用函数而已,printf还是要执行的,知道没有
所以还是要打印出0的
那为什么输出6个数啊?还有怎么判断是不是递归啊?