C程序递归
#include"stdio.h"intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}voidmain(...
#include "stdio.h"
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return(c);
}
void main()
{
printf("%d\n",age(5));
}
这程序怎么理解啊??我不懂age(n-1)+2是什么意思
能给我再详细的解答下吗 我还是不太懂 最好讲清楚真个程序的运作流程是怎么样的 展开
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return(c);
}
void main()
{
printf("%d\n",age(5));
}
这程序怎么理解啊??我不懂age(n-1)+2是什么意思
能给我再详细的解答下吗 我还是不太懂 最好讲清楚真个程序的运作流程是怎么样的 展开
7个回答
展开全部
age(5)说起来太罗嗦,我以age(3)为例。
1.假如main中调用age(3),在进入age(3)函数后,因为n不等于1,所以运行 c=age(n-1)+2;这句话意思是先执行 age(n-1)也就是age(2),将age(2)得到的运算结果加上2赋值给c。
2.接下来,程序执行age(2)。因为n不等于1,所以运行 c=age(n-1)+2;这句话意思是先执行 age(n-1)也就是age(1),将age(1)得到的运算结果加上2赋值给c。
3.接下来,程序执行age(1),此时,n等于1,所以c被赋值为10.
4.接下来,返回到age(2)中,c=age(1)+2=10+2=12.
5.接下来,返回到age(3)中,c=age(2)+2=12+2=14.然后,return c。
6.程序返回到main函数,打印age(3)返回的结果,也就是14.
1.假如main中调用age(3),在进入age(3)函数后,因为n不等于1,所以运行 c=age(n-1)+2;这句话意思是先执行 age(n-1)也就是age(2),将age(2)得到的运算结果加上2赋值给c。
2.接下来,程序执行age(2)。因为n不等于1,所以运行 c=age(n-1)+2;这句话意思是先执行 age(n-1)也就是age(1),将age(1)得到的运算结果加上2赋值给c。
3.接下来,程序执行age(1),此时,n等于1,所以c被赋值为10.
4.接下来,返回到age(2)中,c=age(1)+2=10+2=12.
5.接下来,返回到age(3)中,c=age(2)+2=12+2=14.然后,return c。
6.程序返回到main函数,打印age(3)返回的结果,也就是14.
展开全部
展开:
age(5)=age(4)+2
=age(3)+2+2
=age(2)+2+2+2
=age(1)+2+2+2+2
=10+8=18
age(5)=age(4)+2
=age(3)+2+2
=age(2)+2+2+2
=age(1)+2+2+2+2
=10+8=18
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
age(n-1)+2;这个表达式其实就是递归调用了int age(int n)这个函数。
以上程序等同于:
#include "stdio.h"
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
int d;
d=age(5);
printf("%d\n",d);
}
d=age(5)=age(4)+2=(age(3)+2)+2=((age(2)+2)+2)+2=(((age(1)+2)+2)+2)+2=18
如果函数的递归调用你没有学过的话。我只能用下面的话给你讲了。
按照如上程序:
先求age(5),会返回age(4)+2;但是age(4)我们也不知道,所以就求age(4);会返回age(3)+2;同理求age(3)后会返回age(2)+2;求age(2)后会返回age(1)+2;我们知道当n=1时;程序会返回10;
这样的话我们就可以得到age(5)=age(4)+2
=age(3)+2+2
=age(2)+2+2+2
=age(1)+2+2+2+2
=10+2+2+2+2=18
求解完毕。
以上程序等同于:
#include "stdio.h"
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
int d;
d=age(5);
printf("%d\n",d);
}
d=age(5)=age(4)+2=(age(3)+2)+2=((age(2)+2)+2)+2=(((age(1)+2)+2)+2)+2=18
如果函数的递归调用你没有学过的话。我只能用下面的话给你讲了。
按照如上程序:
先求age(5),会返回age(4)+2;但是age(4)我们也不知道,所以就求age(4);会返回age(3)+2;同理求age(3)后会返回age(2)+2;求age(2)后会返回age(1)+2;我们知道当n=1时;程序会返回10;
这样的话我们就可以得到age(5)=age(4)+2
=age(3)+2+2
=age(2)+2+2+2
=age(1)+2+2+2+2
=10+2+2+2+2=18
求解完毕。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果应该是18。首先age(5) 传入是n=5,因为n!=1,执行else 语句
age(5)=age(4)+2;此时n=4,同理,n!=1,执行else语句。age(4)=age(3)+2;age(3)=age(2)+2;age(2)=age(1)+2;age(1)时,n=1,所以执行c=10;再一次加回去。age(5)=10+2+2+2+2=18.
age(5)=age(4)+2;此时n=4,同理,n!=1,执行else语句。age(4)=age(3)+2;age(3)=age(2)+2;age(2)=age(1)+2;age(1)时,n=1,所以执行c=10;再一次加回去。age(5)=10+2+2+2+2=18.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
age(int)函数一层一层往里套,知道参数等于1,返回10,在一层一层往外扒,脱到最后一层,得出c值。
+2就是每层(n!=1时)都累加。
+2就是每层(n!=1时)都累加。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
age(5)=age(4)+2;
age(4)=age(3)+2;
age(3)=age(2)+2;
age(2)=age(1)+2;
age(1)=10;
age(4)=age(3)+2;
age(3)=age(2)+2;
age(2)=age(1)+2;
age(1)=10;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询