You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java递归实现sumOfPreviousN方法的作业问题求助

问题分析与修正

你的代码核心逻辑方向是对的,但基准条件(base case)的处理错误,导致结果不符合预期。

原代码的问题

当num1 <= num2时返回num1 + num2完全不符合需求:

  • 以sumOfPreviousN(9,4)为例,递归到num1=1时,会返回1+4=5,最终总和变成5 + 5 = 10,而正确结果应该是6。
  • 这个错误的基准条件会把num2额外加入总和,同时没有正确终止递归的累加逻辑。

正确的递归实现

不需要额外的第三个变量,通过调整基准条件和递归逻辑即可解决:

public class Help {
    public static int sumOfPreviousN(int num1, int num2) {
        // 当当前数减去num2后不再产生正数时,终止递归,返回0
        if (num1 <= num2) {
            return 0;
        }
        int subtracted = num1 - num2;
        // 累加当前的有效结果,同时对新的数值继续递归
        return subtracted + sumOfPreviousN(subtracted, num2);
    }

    public static void main(String[] args) {
        System.out.println(sumOfPreviousN(9,4));  // 输出6,符合预期
        System.out.println(sumOfPreviousN(20,6)); // 输出24,符合预期
    }
}

递归逻辑说明

  1. 基准条件:当num1 <= num2时,num1 - num2会得到非正数,这类结果不需要计入总和,因此返回0终止递归。
  2. 递归过程:每次计算num1 - num2得到一个有效的正数结果,将其与递归调用sumOfPreviousN(subtracted, num2)的结果相加——递归调用会自动处理下一个递减后的数值,直到触发基准条件。

比如sumOfPreviousN(20,6)的执行流程:

  • 20 > 6 → 计算14,返回14 + sumOfPreviousN(14,6)
  • 14 > 6 → 计算8,返回8 + sumOfPreviousN(8,6)
  • 8 > 6 → 计算2,返回2 + sumOfPreviousN(2,6)
  • 2 <=6 → 返回0
  • 最终总和:14 + 8 + 2 + 0 =24

内容的提问来源于stack exchange,提问作者k l

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:57:09