c语言函数递归问题。一直都弄不清楚递归是怎么运行的,求高手帮我分析递归运行过程?(详细点)

inta(intn){intx;if(n==1)x=13;elsex=a(n-1)+3;returnx;}voidmain(){printf("%d",a(6));}求递... int a(int n) { int x; if(n==1) x=13; else x=a(n-1)+3; return x; }

void main() { printf("%d",a(6)); }
求递归运行过程解析,运行当a(1)时;x=13,然后,为什么再x=a(n-1)+3运行,?结果返回28。解析不错有赏分。
展开
 我来答
星夜落尘
2012-07-26 · TA获得超过594个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:357万
展开全部
第一次调用a(int n)时,n=6:因为n!=1,所以x1=a(6-1)+3=a(5)+3;

接着计算a(5),n=5:如上x2=a(4)+3;

a(4) n=4:x3=a(3)+3;

a(3) n=3:x4=a(2)+3;

a(2) n=2:x5=a(1)+3;

a(1) n=1:此时n=1,x6=13,并且返回x6,即a(1)的返回值为13,逐步向上返回。

所以:
x6=13
x5=a(1)+3=x6+3;
x4=a(2)+3=x5+3=x6+2*3;
x3=a(3)+3=x4+3=x6+3*3
x2=a(4)+3=x3+3=x6+4*3
x1=a(5)+3=x2+3=x6+5*3=13+15=28

然后return x1,即a(6)的结果为28.

要注意x是局部变量,每次调用a()函数时的x都是不同的,所以我把它标成了带1,2,3,4,5序号的x。
yehuaw
2012-07-26 · TA获得超过355个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:205万
展开全部
28=13+3*(6-1);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwllyy
2012-07-26
知道答主
回答量:77
采纳率:0%
帮助的人:35万
展开全部
要求的是a(6),不只是a(1)。在调用函数中,当a=6时,if(n==1)不成立,执行后面的语句x=a(n-1)+3,即a(6)=a(5)+3。同样的做法,a(5)=a(4)+3,a(4)=a(3)+3,a(3)=a(2)+3,a(2)=a(1)+3。而a(1)=13。所以,最后的结果a(6)=3+3+3+3+3+13=28。还有什么不懂的,可以问我。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-27
展开全部
楼上正解,无需多言
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式