【详解】使用Java解决递归问题:五人年龄计算

举报
皮牙子抓饭 发表于 2026/03/04 15:08:46 2026/03/04
【摘要】 使用Java解决递归问题:五人年龄计算背景介绍假设有一个场景:5个人坐在一起。当你问第五个人的年龄时,他说他比第四个人大2岁;而第四个人说他比第三个人大2岁;第三个人说他比第二个人大2岁;第二个人说他比第一个人大2岁;最后,第一个人告诉你他是10岁。那么,第五个人到底多大呢?这个问题可以通过递归的方式来解决。递归是一种在程序中调用自身的方法来解决问题的技术。在这个例子中,我们可以定义一个方法...

使用Java解决递归问题:五人年龄计算

背景介绍

假设有一个场景:5个人坐在一起。当你问第五个人的年龄时,他说他比第四个人大2岁;而第四个人说他比第三个人大2岁;第三个人说他比第二个人大2岁;第二个人说他比第一个人大2岁;最后,第一个人告诉你他是10岁。那么,第五个人到底多大呢?

这个问题可以通过递归的方式来解决。递归是一种在程序中调用自身的方法来解决问题的技术。在这个例子中,我们可以定义一个方法来根据每个人相对于前一个人的年龄差来计算他们的年龄。

Java代码实现

下面是一个简单的Java程序,用于计算第五个人的年龄:

public class AgeCalculator {

    /**
     * 计算第n个人的年龄。
     * @param n 第n个人
     * @return 第n个人的年龄
     */
    public static int calculateAge(int n) {
        if (n == 1) {
            return 10; // 第一个人的年龄
        } else {
            return calculateAge(n - 1) + 2; // 每个人比前一个人大2岁
        }
    }

    public static void main(String[] args) {
        int fifthPersonAge = calculateAge(5);
        System.out.println("第五个人的年龄是: " + fifthPersonAge + " 岁");
    }
}

代码解析

  1. 方法定义:​​calculateAge​​ 方法接受一个整数参数 ​​n​​,表示第 ​​n​​ 个人。
  2. 递归终止条件:当 ​​n​​ 等于 1 时,返回 10,因为第一个人的年龄是 10 岁。
  3. 递归调用:对于其他情况,方法会调用自身,传入 ​​n-1​​,并加上 2(因为每个人都比前一个人大 2 岁)。
  4. 主方法:在 ​​main​​ 方法中,我们调用 ​​calculateAge(5)​​ 来计算第五个人的年龄,并将结果打印出来。

运行结果

运行上述程序,输出结果为:

第五个人的年龄是: 18 岁


这个问题可以通过递归或者简单的循环来解决。这里我将提供两种方法的Java代码示例:一种是使用递归的方法,另一种是使用循环的方法。

方法一:使用递归

public class AgeCalculator {

    public static int calculateAge(int person) {
        if (person == 1) {
            return 10; // 第一个人的年龄
        } else {
            return calculateAge(person - 1) + 2; // 每个人都比前一个人大2岁
        }
    }

    public static void main(String[] args) {
        int fifthPersonAge = calculateAge(5);
        System.out.println("第五个人的年龄是: " + fifthPersonAge);
    }
}



方法二:使用循环

public class AgeCalculator {

    public static int calculateAge() {
        int firstPersonAge = 10; // 第一个人的年龄
        int currentAge = firstPersonAge;
        
        for (int i = 2; i <= 5; i++) {
            currentAge += 2; // 每个人都比前一个人大2岁
        }
        
        return currentAge;
    }

    public static void main(String[] args) {
        int fifthPersonAge = calculateAge();
        System.out.println("第五个人的年龄是: " + fifthPersonAge);
    }
}

解释

  1. 递归方法
  • ​calculateAge​​ 方法接受一个参数 ​​person​​,表示当前询问的人。
  • 如果 ​​person​​ 是 1,返回 10(第一个人的年龄)。
  • 否则,递归调用 ​​calculateAge(person - 1)​​ 并加 2,表示当前人的年龄比前一个人大 2 岁。
  • 在 ​​main​​ 方法中,调用 ​​calculateAge(5)​​ 来计算第五个人的年龄。
  1. 循环方法
  • ​calculateAge​​ 方法初始化第一个人的年龄为 10。
  • 使用一个 ​​for​​ 循环从第 2 个人到第 5 个人,每次循环将当前年龄加 2。
  • 最后返回计算得到的第五个人的年龄。
  • 在 ​​main​​ 方法中,调用 ​​calculateAge()​​ 来计算第五个人的年龄。

这两种方法都能正确地计算出第五个人的年龄,结果都是 18 岁。你可以根据实际情况选择适合的方法。这个问题可以通过递归或迭代的方式来解决。下面我将分别介绍两种方法的Java实现。

方法一:递归

递归方法通过函数自身调用自己来解决问题,直到达到一个已知条件(在这个问题中,第一个人的年龄是已知的)。

public class AgeCalculator {

    public static int getAge(int person) {
        if (person == 1) {
            return 10; // 第一个人的年龄
        } else {
            return getAge(person - 1) + 2; // 每个人都比前一个人大2岁
        }
    }

    public static void main(String[] args) {
        int fifthPersonAge = getAge(5);
        System.out.println("第五个人的年龄是: " + fifthPersonAge);
    }
}

方法二:迭代

迭代方法通过循环逐步计算每个人的年龄,直到计算出第五个人的年龄。

public class AgeCalculator {

    public static int getAge() {
        int age = 10; // 第一个人的年龄
        for (int i = 2; i <= 5; i++) {
            age += 2; // 每个人都比前一个人大2岁
        }
        return age;
    }

    public static void main(String[] args) {
        int fifthPersonAge = getAge();
        System.out.println("第五个人的年龄是: " + fifthPersonAge);
    }
}

解释

  1. 递归方法
  • ​getAge​​ 方法接收一个参数 ​​person​​,表示当前询问的人。
  • 如果 ​​person​​ 是 1,直接返回 10(第一个人的年龄)。
  • 否则,递归调用 ​​getAge(person - 1)​​ 获取前一个人的年龄,并加上 2。
  1. 迭代方法
  • 初始化 ​​age​​ 为 10(第一个人的年龄)。
  • 使用一个 ​​for​​ 循环从 2 到 5,每次循环将 ​​age​​ 增加 2,表示每个人比前一个人大 2 岁。
  • 最后返回 ​​age​​,即第五个人的年龄。

输出

无论是使用递归还是迭代方法,最终输出的结果都是:

第五个人的年龄是: 18

这两种方法都可以有效地解决问题,选择哪种方法取决于具体的需求和个人偏好。递归方法代码更简洁,但可能会在大规模数据处理时导致栈溢出;而迭代方法则更加稳定,适用于各种规模的数据。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。