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

Java递归矩阵求和:遇列中0仅累加上方元素的问题排查

递归实现矩阵求和的问题修复

你的代码核心问题在于递归调用的结果没有被累加,同时缺少递归终止的边界判断,导致只有当前行的元素被计入总和。

问题拆解

  1. 递归结果丢失:searchDown方法中调用searchDown(matrix, i+1, j)后,没有将这个调用的返回值与当前元素相加,下层递归计算的结果被直接丢弃。
  2. 缺少边界判断:当遍历到矩阵最后一行之后(i >= matrix.length),没有终止递归的逻辑,会导致数组越界。

修正后的代码

static int solution(int[][] matrix) {
    int sum = 0;
    for (int i = 0; i < matrix[0].length; i++) {
        sum += searchDown(matrix, 0, i);
    }
    return sum;
}

static int searchDown(int[][] matrix, int i, int j) {
    // 边界:超出矩阵行数,终止递归返回0
    if (i >= matrix.length) {
        return 0;
    }
    // 遇到0,终止该列遍历,返回0
    if (matrix[i][j] == 0) {
        return 0;
    }
    // 累加当前元素 + 下一行同列的递归结果
    return matrix[i][j] + searchDown(matrix, i + 1, j);
}

public static void main(String[] args) {
    int[][] matrix = new int[][]{
            {0, 1, 1, 2},
            {0, 5, 0, 0},
            {2, 0, 3, 3}
    };
    int sum = solution(matrix);
    System.out.println(sum); // 输出9
}

逻辑说明

  • 每一列从第一行开始向下遍历,遇到0则停止该列的累加。
  • 递归过程中,每次将当前非0元素的值与下一行同列的递归结果相加,实现整列有效元素的累加。
  • 边界判断确保遍历到矩阵末尾时安全终止递归。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:16