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

统计1、2、3、4凑和为10的Java递归代码为何仅返回1而非总方案数?

问题原因及修复方案

错误根源

你的代码核心问题是使用了Java的短路或运算符||:只要||左侧的表达式返回true,右侧的所有表达式都会直接跳过执行。你把四条递归调用用||串联后,只要任意一条路径凑出和为10,后续所有其他可选路径的递归都会被中断,自然只能统计到1种方案。

修复方法

方案1:统计有序方案(顺序不同算不同方案)

直接去掉布尔返回值和短路逻辑,让四条递归路径全部独立执行即可,修改后代码如下:

public class Main {
    static int count = 0;
    public static void work(int i){
        if (i == 10) {
            count++;
            return;
        }
        if (i > 10) {
            return;
        }
        work(i + 4);
        work(i + 3);
        work(i + 2);
        work(i + 1);
    }

    public static void main(String[] args) {
        work(0);
        System.out.println(count);
    }
}

运行后输出结果为401,对应所有有序排列的方案总数,比如1+2和2+1会被算作两种不同的方案。

方案2:统计无序方案(顺序不同算同一种方案)

如果只需要统计不考虑排列顺序的组合数,可以增加参数限制每次选取的数字不小于上一次的,避免重复统计相同组合的不同排列,修改后代码如下:

public class Main {
    static int count = 0;
    // min参数限制本次选取的数字最小值,保证组合升序不重复
    public static void work(int i, int min){
        if (i == 10) {
            count++;
            return;
        }
        if (i > 10) {
            return;
        }
        for (int num = min; num <= 4; num++) {
            work(i + num, num);
        }
    }

    public static void main(String[] args) {
        work(0, 1);
        System.out.println(count);
    }
}

运行后输出结果为23,对应所有无序组合的方案总数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:07