C语言简单的递归程序

题目:有5个学生坐在一起,问第五个学生多少岁?

一个说他比第四个学生大2岁。问第4个学生岁数,他说比第3个学生大2岁。问第3个学生,又说比第2个学生大2岁。问第2个学生,说比第1个学生大2岁。最后问第1个学生,他说是10岁、请第5个学生多大。

解题思路:
想知道求第五个学生的年龄,就必须先知道第四个学生的年龄。要想求第4个学生的年龄必须先知道第3个学生的年龄,而第3个学生的年龄又取决于第2个学生的年龄,第2个学生的年龄取决第1个学生的年龄。而且每一人学生的年龄都比其前1个学生的年龄大2。显然,这是一个递归问题。如果age 是年龄函数,age (n) 代表第n个学生的年龄,可以用下面的式子表示上述关系。
age (5) =age (4) +2
age (4) =age (3) +2
age (3) =age (2) +2
age (2) =age (1) +2
age (1) =10
可以看到,当n>1时,求第n个学生的年龄的公式是相同的,即前一个学生的年龄加2,因此可以用同一个公式表示上述关系。

求解可分成两个阶段:第一阶段是“回溯”, 即将第n个学生的年龄表示为第(n一1) 个学生年龄的函数:age (n-1) +2.而第(n-1) 个学生的年龄仍然不知道,还要“回推”到第(n-2) 个学生的年龄······直到第1个学生的年龄。此时 age (1) 已知,不必再向前推了。然后开始第二阶段,采用递推方法,从第1个学生的已知年龄推算出第2个学生的年龄(12岁), 从第2个学生的年龄推算出第3个学生的年龄(14岁)。一直推算出第5个学生的年龄(18岁)为止。也就是说,一个递归的问题可以分为“回溯”和“递推”两个阶段。要经历若十步才能求出最的值。显而易见,如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。例如,age (1) =10, 就是使递归
结束的条件。

编写程序:

#include<stdio.h>

int age()
{
    
    
	int c;   //变量c用作存放函数的返回值的变量
	if(n==1)
		c=10;
	else 
	c=age(n-1)+2;   //在age函数里调用age函数,即递归调用
	return (c);
}

int main()
{
    
    
	printf("%d\n",age(5));  //输出第五个学生的年龄
	return 0;
}

运行结果为18.

おすすめ

転載: blog.csdn.net/qq_32100603/article/details/109790905