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

Java奇数对应偶数连乘序列的递归实现问题求助

代码错误排查:奇数n的连乘计算问题

先看你提供的代码:

public static int calculate(int n){
    if (n <= 1) {
        return 1;
    } else if (n >= 2 && n%2 == 0){
        return (n * calculate(n - 2));
    } else if (n >= 3 && n%2 == 1){
        return n-1 * calculate(n-2);
    } else {
        return n;
    }
}

你的需求是:当n为奇数时,计算序列 (n-1) * (n-3) * (n-5)..... * 2,比如n=9时得到8642,n=11时得到1086...*2。

问题根源

出错的那行return n-1 * calculate(n-2)是运算符优先级导致的问题:Java中乘法(*)的优先级高于减法(-),所以这行代码实际执行的是 n - (1 * calculate(n-2)),完全不符合你需要的(n-1) * calculate(n-2)逻辑。

修正方案

给n-1加上括号,明确运算顺序:

return (n-1) * calculate(n-2);

修正后的完整代码:

public static int calculate(int n){
    if (n <= 1) {
        return 1;
    } else if (n >= 2 && n%2 == 0){
        return (n * calculate(n - 2));
    } else if (n >= 3 && n%2 == 1){
        return (n-1) * calculate(n-2);
    } else {
        return n;
    }
}

测试验证:

  • 当n=9时,递归会依次计算8*calculate(7) → 8*6*calculate(5) → 8*6*4*calculate(3) → 8*6*4*2*calculate(1),最终得到8*6*4*2*1=384,符合预期。
  • 当n=11时,会得到10*8*6*4*2*1=3840,也符合需求。

可选优化

可以合并分支逻辑,让代码更简洁:不管n是奇数还是偶数,都取当前的最大偶数参与计算,避免多分支判断出错:

public static int calculate(int n){
    if (n <= 1) {
        return 1;
    }
    int current = n % 2 == 0 ? n : n-1;
    return current * calculate(current - 2);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:54:18