c语言函数的简单递归调用

函数的递归调用

****在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
例如:

int f(int x)
{
     
	int y, z;
	z = f(y);
	return (2 * z);
}

在调用函数f的过程中,又要调用f函数(本函数),这是直接调用本函数,如果在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数,这就是间接调用本函数。显然,程序中应该只出现有限次数的、有终止的递归调用,这个可以用if语句来控制,只有在某一条件成立时才继续执行递归调用;否则就不再继续。
例题:有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。问第4个学生岁数,他说比第3个学生大2岁。问第3个学生,又说比第2个学生大2岁。问第2个学生,说比第1个学生大2岁。最后问第1个学生,他说是10岁。请问第5个学生多大?
解题思路:要求第5个学生的年龄,就必须先知道第4个学生的年龄,而第4个学生的年龄也不知道,要求第4个学生的年龄必须先知道第3个学生的年龄,而第3个学生的年龄又取决于第2个学生的年龄,第2个学生的年龄取决于第1个学生的年龄。而且每一个学生的年龄都比前1个学生的年龄大2.即:
age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 10
可以用数学公式表述如下:
age(n) = 10 (n = 1)
age(n) = age(n - 1) + 2 (n > 1)
可以看到,当n>1时,求每位学生的年龄的公式是相同的。因此可以用一个函数表示上述关系。
显然,这是一个递归问题,求解可分为两个阶段:第1阶段是“回溯”,即将第5个学生的年龄表示为第4个学生年龄的函数,表示为age(5)=age(4)+2。而第4个学生的年龄仍然不知道,还要“回溯”到第3个学生的年龄,表示为age(4)=age(3)+2······直到第1个学生的年龄。此时age(1)已知等于10,不必再回溯了。然后开始第2阶段,采用递推方法,从第1个学生的已知年龄推算出第2个学生的年龄(12岁),从第2个学生的年龄推算出第3个学生的年龄(14岁)······一直推算出第5个学生的年龄(18岁)为止。也就是说,一个递归的问题可以分为“回溯”赫‘递推“两个阶段。要经历若干步才能求出最后的值。显而易见,如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。例如,age(1)=10,就是使递归结束的条件。
编写程序

int age(int n)
{
     
	int c;
	if (n == 1)
		c = 10;
	else
		c = age(n - 1) + 2;
	return (c);
}

用一个主函数调用age函数,求得第5个学生的年龄。整个程序如下:

#include
int main()
{
     
	int age(int n);
	printf("NO.5,age:%d\n", age(5));
	return 0;
}
int age(int n)
{
     
	int c;
	if (n == 1)
		c = 10;
	else
		c = age(n - 1) + 2;
	return (c);
}

你可能感兴趣的:(c#,递归法)