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

递归计算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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:37