Java递归矩阵求和:遇列中0仅累加上方元素的问题排查
递归实现矩阵求和的问题修复
你的代码核心问题在于递归调用的结果没有被累加,同时缺少递归终止的边界判断,导致只有当前行的元素被计入总和。
问题拆解
- 递归结果丢失:
searchDown方法中调用searchDown(matrix, i+1, j)后,没有将这个调用的返回值与当前元素相加,下层递归计算的结果被直接丢弃。 - 缺少边界判断:当遍历到矩阵最后一行之后(
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
相关产品推荐
相关产品推荐

