C语言递归函数问题
#include<stdio.h>voidmain(){intage(intn);printf("%d\n",age(5));}intage(intn);/*求年龄的递归...
# include <stdio.h>
void main()
{
int age(int n);
printf("%d\n",age(5));
}
int age(int n);/*求年龄的递归函数*/
{
int c;
if (n==1)
c=10;
else
c=age(n-1)+2;
return(c);
}
谁能帮我仔细分析一下main程序调用age函数时,c=age(n-1)+2;
return(c);是如何返回age(1)的值,age(2)值,age(3)值,age(4)值的。 展开
void main()
{
int age(int n);
printf("%d\n",age(5));
}
int age(int n);/*求年龄的递归函数*/
{
int c;
if (n==1)
c=10;
else
c=age(n-1)+2;
return(c);
}
谁能帮我仔细分析一下main程序调用age函数时,c=age(n-1)+2;
return(c);是如何返回age(1)的值,age(2)值,age(3)值,age(4)值的。 展开
3个回答
展开全部
求解可分:
第一阶段:“回推”
即将你要求的第N(5)个人的年龄表示为第(n-1)人年龄的函数,而第(n-1)个人的年龄仍然不知道就还要回推到第(n-2)人的年龄的函数直到已知年龄的那个人为止(if(n==1)c=10;)就是结束条件了。如此题n=5,又已知第一个人年龄故回推到第一个人结束
第二阶段:“递推”
从第一个人的已知年龄推算出第二个人年龄,从第二个人的年龄推算到第三个人的年龄直到算出你要求的第N个人的年龄为止
程序中不应该出现无终止的递归调用,而只应出现有限次数的,有终止的递归调用,这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不在继续。
第一阶段:“回推”
即将你要求的第N(5)个人的年龄表示为第(n-1)人年龄的函数,而第(n-1)个人的年龄仍然不知道就还要回推到第(n-2)人的年龄的函数直到已知年龄的那个人为止(if(n==1)c=10;)就是结束条件了。如此题n=5,又已知第一个人年龄故回推到第一个人结束
第二阶段:“递推”
从第一个人的已知年龄推算出第二个人年龄,从第二个人的年龄推算到第三个人的年龄直到算出你要求的第N个人的年龄为止
程序中不应该出现无终止的递归调用,而只应出现有限次数的,有终止的递归调用,这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不在继续。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2007-09-06
展开全部
仔细分析下你的程序:
一次调用age(n),实参n=5!=1,所以c在第一次调用时是随机值,age(5)=c=age(4)+2
二次调用age(n),实参n=4!=1,age(4)=c=c+2;
三次调用age(n),实参n=3!=1,age(3)=c=c+2;
四次调用age(n),实参n=2!=1,age(2)=c=c+2;
五次调用age(n),实参n=1,age(1)=c=c+2;此时的c实际上已经等于一次调用时的c值+8;而c此时被赋值为10,所以age(5)=18;
一次调用age(n),实参n=5!=1,所以c在第一次调用时是随机值,age(5)=c=age(4)+2
二次调用age(n),实参n=4!=1,age(4)=c=c+2;
三次调用age(n),实参n=3!=1,age(3)=c=c+2;
四次调用age(n),实参n=2!=1,age(2)=c=c+2;
五次调用age(n),实参n=1,age(1)=c=c+2;此时的c实际上已经等于一次调用时的c值+8;而c此时被赋值为10,所以age(5)=18;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好的我帮你你分析以下你的程序:
1 调用是age(5) 它再调用age(4),然后返回age(4)+2
2 age(4)过程中调用age(3),然后返回age(3)+2
3 在age(3)过程中调用age(2),然后返回age(2)+2
4 在age(2)过程中调用age(1),然后返回age(1)+2
5 在age(1)过程中,直接返回10的值。
由上过程可以看出递归深度是5,
那么:age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=10
所以 age(5)=18
这仅仅是一个单向递归,深度是单向延伸的。还有向广度延伸的
1 调用是age(5) 它再调用age(4),然后返回age(4)+2
2 age(4)过程中调用age(3),然后返回age(3)+2
3 在age(3)过程中调用age(2),然后返回age(2)+2
4 在age(2)过程中调用age(1),然后返回age(1)+2
5 在age(1)过程中,直接返回10的值。
由上过程可以看出递归深度是5,
那么:age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=10
所以 age(5)=18
这仅仅是一个单向递归,深度是单向延伸的。还有向广度延伸的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询