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,符合预期 } }
递归逻辑说明
- 基准条件:当
num1 <= num2时,num1 - num2会得到非正数,这类结果不需要计入总和,因此返回0终止递归。 - 递归过程:每次计算
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
相关产品推荐
相关产品推荐

