3-C语言-五个学生并排坐,问第五个学生的年龄多大。

问题描述:

        问第五个学生,他说比第四个大两岁,问第四个学生,他说比第三个大两岁,一直重复,直到第一个,第一个说他10岁了。问:第五个学生多大?

思路分析:

  1. 先不着急写代码。先分析问题
  2. 由题目知道,只知道第一个孩子的年龄,且每个挨着的孩子之间年龄差2岁。
  3. 在主函数中,我们需要写一个函数,这个函数最后会返回我需要第n个孩子的年龄,即age(n)表示当前孩子年龄。
  4. 随后带着函数,去从题干中,提取规律。
  5. 我们发现:
  6. //age(5)=age(4)+2;
    //age(4)=age(3)+2;
    //age(3)=age(2)+2;
    //age(2)=age(1)+2;
    //age(1) = 10;
  7. 第五个孩子,是比第四个孩子大2岁,所以第四个孩子年龄再加2.就这样一直往内递推,直到第一个孩子,说我是10岁啊,然后开始往上回归,挨个赋值,
  8. 即递推的两个关键条件:(1)结束递归的限制条件(2)每次递归所传递的值应是不断接近限制条件的。
  9. 这里满结束递归的限制条件,是n=1,而不断接近n=1的递归传递值,则是n-1.

代码如下:

#include <stdio.h>
//问题分析:
//问第五个学生,他说比第四个大两岁,问第四个学生,他说比第三个大两岁,一直重复,直到第一个,才说自己多大。
//如果我们写的函数,为计算学生的年龄,每一个传进的n为当前学生的年龄,那么可以写成 
//age(5)=age(4)+1;
//age(4)=age(3)+1;
//age(3)=age(2)+1;
//age(2)=age(1)+1;
//age(1) = 10;
//可以知道,当n大于1时,有一个规律的式子为age(n)=age(n-1)+2;小于等于1的时候,直接age=10;
//此时此刻,已经知道的公式,直接照着写递归即可。
//突然想到,思考方式,我觉得应该先写主函数,然后看我们所需要的函数,是干什么的,如果最后我就需要返回学生的年龄。那么age(n)便表示第n个学生的年龄
//然后再带着这个意义,去思考上述公式,就容易发现规律了。
int age(int n)
{
	if (n <= 1)
		return 10;
	else
		return 2 + age(n - 1);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int age_stu = age(n);
	printf("第%d个学生的年龄为%d\n",n,age_stu);
}

猜你喜欢

转载自blog.csdn.net/m0_59844149/article/details/131478126