递归计算1到N(含)奇数和的方法实现及正确性咨询
你的递归解法存在基准条件错误,我来帮你分析和修正
咱们先拆解你这段代码的问题,再一步步调整到正确状态:
原代码的核心问题
你写的递归方法里,基准条件(base case)的逻辑出错了:
if (n <= 1) { return 0; }
当n=1时,1本身是1到N范围内的奇数,应该被计入总和,但你的代码返回了0,这直接导致最终求和结果少了1。比如输入10时,原代码计算的是9+7+5+3+0=24,但正确结果应该是1+3+5+7+9=25。
另外,处理偶数n的方式虽然能运行,但可以更简洁,不过这不是主要问题。
修正后的递归实现
这里给你两种清晰易懂的正确写法:
写法一:先统一转为奇数再处理基准条件
public class Main { public static void main(String[] args) { System.out.println(sum(10)); // 输出25,符合预期 } static int sum(int n) { // 把偶数n转为小于等于它的最大奇数 if (n % 2 == 0) { n--; } // 基准条件:n小于1时没有奇数,返回0;n等于1时返回1本身 if (n < 1) { return 0; } if (n == 1) { return 1; } // 递归逻辑:当前奇数 + 比它小2的奇数的和 return n + sum(n - 2); } }
写法二:直接判断奇偶性递归(更简洁)
public class Main { public static void main(String[] args) { System.out.println(sum(10)); // 输出25 } static int sum(int n) { // 基准条件:n<=0时没有奇数,返回0 if (n <= 0) { return 0; } // 如果n是偶数,直接递归处理n-1(因为偶数不计入求和) if (n % 2 == 0) { return sum(n - 1); } // 如果n是奇数,返回n加上n-2的奇数和 return n + sum(n - 2); } }
验证逻辑
以输入10为例,写法二的递归流程是:sum(10) → sum(9) → 9 + sum(7) → 9+7+sum(5) → 9+7+5+sum(3) → 9+7+5+3+sum(1) → 9+7+5+3+1+sum(-1) → 9+7+5+3+1+0,最终结果25,完全正确。
内容的提问来源于stack exchange,提问作者Joe Mau
相关产品推荐
相关产品推荐

