C语言问题,求详解!!!有分!
voidmain(){intw=5;voidfun(int);fun(w);printf("\n");}voidfun(intk){if(k>0)fun(n-1);pri...
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)不好意思打错了,其他没打错。 展开
{ 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)不好意思打错了,其他没打错。 展开
6个回答
展开全部
#include<stdio.h>
void main()
{
int w=5;
void fun(int);
fun(w);//调用fun子函数,传递5
printf("\n");
}
void fun(int k)
{
if (k>0) //判断传递的值,如果大于0则调用自身
{
fun(k-1);//递归调用
}
else
{
return 0;//加上这几句就会输出1,2,3,4,5.因为程序fun(0)时没返回而是执行下面的语句,于是0也进行了输出
}
/*
*fun(5),fun(4),fun(3),fun(2),fun(1),fun(0),当到了fun(0)时条件才不满足大于0,才输出,0,1,2,3,4,5
*/
printf("%d",k);
}
更多追问追答
追问
为什么有fun(5)呢?不是k-1吗?变成fun(4)然后输出K=5,为什么还要回去?可以详细解释下吗?为了考二级暑假自学C呢,函数这点有的地方看不懂。。。。。
追答
自身调用自身所以并没执行printf而是再次执行了自身,如果不理解你可以尝试单步调试
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序有错误吧。。
void fun(int k)
{if (k>0) fun(n-1);//这里的n-1应该是k-1的。。
printf("%d",k);
}
这是个迭代程序,对于初始值w而言,就会迭代w步,每次在进行fun()运算,直到输入的值为0,然后再依次打印到屏幕上
void fun(int k)
{if (k>0) fun(n-1);//这里的n-1应该是k-1的。。
printf("%d",k);
}
这是个迭代程序,对于初始值w而言,就会迭代w步,每次在进行fun()运算,直到输入的值为0,然后再依次打印到屏幕上
追问
能在详细点,算法写下可以不
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fun(n-1);
printf("%d",k);
关键在这里,是先调用自身,在打印
所以啊,那么就是在最后没法再调用自身的时候打印k,这是k是0,接着一层一层的返回到上一个调用它的地方,结束调用,打印
那么就是从小到大了
printf("%d",k);
关键在这里,是先调用自身,在打印
所以啊,那么就是在最后没法再调用自身的时候打印k,这是k是0,接着一层一层的返回到上一个调用它的地方,结束调用,打印
那么就是从小到大了
更多追问追答
追问
那是从If判断那里开始调用?先调用fun(5),然后判断变成了4,在返回if判断然后调用?
追答
这个子函数只有两句话,一个是如果k>0则调用本身(并且k减去1),下面一句和上面的if没关系,只是打印当前k的值
当调用到k是0了,那么就不在调用本身,也就是if包含的语句不执行了,那么就执行下面的打印k
接着结束子函数,回到上一个调用的地方,那么接着就是执行打印了
以此类推,就是打印,结束调用。最后返回main,结束程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
递归调用,直到k=0的时候,才会执行printf("%d",k);
追问
那为什么输出6个数啊?还有怎么判断是不是递归啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询