有n个人坐在一起。问第n个人几岁,他说比第n-1个人大2岁;问第n-1个人岁数,他说比第n-2个人大2岁;接着问第n-2个人……一直问到第一个人,第一个人说他今年m岁。请根据n和m的值计算出第n个人的岁数。
【分析】
问题的关键是要求第n个人的岁数,就必须先知道第n-1个人的岁数,且第n个人与第n-1个人之间年龄差总是2岁,由此可知是递归。那么,当知道第1个人的岁数后就可以通过不断加2推断出其后面的人的岁数,一直推断到第n个人。
列函数式如下:
age(n)=age(n-1)+2 (n>1)
age(n)=m (n=1)
根据以上函数形式,定义递归函数age(),该函数需有两个参数:一共有多少人n和第1个人的年龄m,都是整型。
#include <stdio.h>
int age( int n, int m )
{
int c;
if( n==1 ) c = m;
else c = age( n-1, m )+2;
return c ;
}
int main( void )
{
int n,m;
scanf("%d%d",&n,&m);
printf("age(%d):%d\n",n,age(n,m));
return 0;
}