有n個(gè)人坐在一起。問第n個(gè)人幾歲克懊,他說比第n-1個(gè)人大2歲;問第n-1個(gè)人歲數(shù)七蜘,他說比第n-2個(gè)人大2歲谭溉;接著問第n-2個(gè)人……一直問到第一個(gè)人,第一個(gè)人說他今年m歲橡卤。請(qǐng)根據(jù)n和m的值計(jì)算出第n個(gè)人的歲數(shù)夜只。
【分析】
問題的關(guān)鍵是要求第n個(gè)人的歲數(shù),就必須先知道第n-1個(gè)人的歲數(shù)蒜魄,且第n個(gè)人與第n-1個(gè)人之間年齡差總是2歲扔亥,由此可知是遞歸。那么谈为,當(dāng)知道第1個(gè)人的歲數(shù)后就可以通過不斷加2推斷出其后面的人的歲數(shù)旅挤,一直推斷到第n個(gè)人。
列函數(shù)式如下:
age(n)=age(n-1)+2? (n>1)
age(n)=m? ? ? ? (n=1)
根據(jù)以上函數(shù)形式伞鲫,定義遞歸函數(shù)age()粘茄,該函數(shù)需有兩個(gè)參數(shù):一共有多少人n和第1個(gè)人的年齡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;
}