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。解析不错有赏分。 展开
void main() { printf("%d",a(6)); }
求递归运行过程解析,运行当a(1)时;x=13,然后,为什么再x=a(n-1)+3运行,?结果返回28。解析不错有赏分。 展开
4个回答
展开全部
第一次调用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。
接着计算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。
展开全部
28=13+3*(6-1);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要求的是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
展开全部
楼上正解,无需多言
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询