有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。问第4个学生多少岁,他说比第3个学生大2岁。问第3个学生多少岁,又说比第2个学生大2岁。问第2个学生,说比第1个学生大2岁,最后问第1个学生,他说是10岁。请问第5个学生多大。
int age(int n)//定义递归函数
{
int c;
if (n == 1)
return 10;//如果n等于1,反正10
else
c = age(n - 1) + 2;
return c;//如果n年龄不等于1,年龄是前一个学生的年龄加2,最后返回年龄
}
#include<stdio.h>
int main()
{
int age(int n);
printf("No.5.student_age:%d\n",student_age(5));//输出5个学生的年龄
return 0;
}
输入结果:
No.5.student_age:18
解题思路:
- 要求第5个学生的年龄,就必须先知道第4个
- 要求第4个学生的年龄,就必须先知道第3个
- 要求第3个学生的年龄,就必须先知道第2个
- 要求第2个学生的年龄,就必须先知道第1个
- 而且每个学生的年龄都比其前1个学生的年龄大2
数学公式如下:
age(n)=10(n=1) age(n)=10 (n=1) age(n)=10(n=1)
age(n)=age(n−1)+2(n>1) age(n)=age(n-1)+2 (n>1) age(n)=age(n−1)+2(n>1)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qsfexW8m-1667653019340)(C:\Users\LENOVO\Desktop\无标题.png)]
age(5)是main函数调用的,其余4次是在age函数中调用的,即递归4次;一次一次的递归调用,到age(1)得到确定的值,然后再递推出age(2)→age(3)→age(4)→age(5)
age(5)=age(4)+2→18
age(4)=age(3)+2→16
age(3)=age(2)+2→14
age(2)=age(1)+2→12
age(1)=10