有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他说是 10 岁。请问第五个人多大?
这是一个典型的线性递推关系问题,也可以用递归思想来建模。
设第 个人的年龄为,根据题意:
基准条件:
递推关系:,其中
这实际上是一个等差数列:
验证:
因此,第五个人 18 岁。
第五个的年龄为18通项公式:
所以
public class Demo23 {
public static void main(String[] args) {
int age = 10; // 第一个人的年龄
for (int i = 0; i < 4; i++) { // 后面4个人,每人+2
age += 2;
}
System.out.println("第五个人" + age + "岁");
}
}public class Demo23 {
// 递归函数:求第 n 个人的年龄
public static int getAge(int n) {
if (n == 1) {
return 10; // 基准条件
}
return getAge(n - 1) + 2; // 递归关系
}
public static void main(String[] args) {
System.out.println("第五个人的年龄为" + getAge(5));
}
}public class Demo23 {
public static void main(String[] args) {
int n = 5;
int age = 10 + (n - 1) * 2;
System.out.println("第五个人" + age + "岁");
}
}此题是递归入门经典案例,与“斐波那契数列”“阶乘”并列为三大递归教学范例。
虽然本题用循环或公式更高效,但使用递归有助于理解函数调用栈和问题分解的思想。
在实际开发中,若递归深度较大(如),应优先考虑迭代以避免 StackOverflowError。
该模型可推广到任意等差序列的生成,例如:工资每年涨 500 元、树木每年长高 10 厘米等。
总结:本题虽简单,但清晰展示了递归思维与数学建模的结合,是理解算法基础的重要一步。