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)不好意思打错了,其他没打错。
展开
 我来答
暮鼓晨钟cy
2013-07-24 · TA获得超过282个赞
知道小有建树答主
回答量:205
采纳率:100%
帮助的人:55.8万
展开全部
这个是一个递归算法,fun函数不断的调用自身,最开始k=5,于是调用fun(4),但是fun(5)还没执行完,fun(4)里继续调用fun(3),直到fun(0)时,直接输出0,然后函数返回上层,即fun(1),而fun(1)已经执行完if语句,直接输出1,同理,函数不断返回上层,最上层的函数是fun(5),所以直到输出5后,整段函数执行完毕
likehei
2013-07-24 · TA获得超过940个赞
知道小有建树答主
回答量:875
采纳率:33%
帮助的人:667万
展开全部
#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而是再次执行了自身,如果不理解你可以尝试单步调试
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xcjh1518
2013-07-24
知道答主
回答量:5
采纳率:0%
帮助的人:7249
展开全部
程序有错误吧。。
void fun(int k)
{if (k>0) fun(n-1);//这里的n-1应该是k-1的。。
printf("%d",k);
}
这是个迭代程序,对于初始值w而言,就会迭代w步,每次在进行fun()运算,直到输入的值为0,然后再依次打印到屏幕上
追问
能在详细点,算法写下可以不
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cpucash
2013-07-24 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:970万
展开全部
fun(n-1);
printf("%d",k);
关键在这里,是先调用自身,在打印
所以啊,那么就是在最后没法再调用自身的时候打印k,这是k是0,接着一层一层的返回到上一个调用它的地方,结束调用,打印
那么就是从小到大了
更多追问追答
追问
那是从If判断那里开始调用?先调用fun(5),然后判断变成了4,在返回if判断然后调用?
追答
这个子函数只有两句话,一个是如果k>0则调用本身(并且k减去1),下面一句和上面的if没关系,只是打印当前k的值

当调用到k是0了,那么就不在调用本身,也就是if包含的语句不执行了,那么就执行下面的打印k
接着结束子函数,回到上一个调用的地方,那么接着就是执行打印了
以此类推,就是打印,结束调用。最后返回main,结束程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
易非凡m
2013-07-24 · 超过21用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:56.3万
展开全部
递归调用,直到k=0的时候,才会执行printf("%d",k);
追问
那为什么输出6个数啊?还有怎么判断是不是递归啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式