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

递归计算矩阵所有偶数和时的逻辑异常求助

解决Java递归计算矩阵偶数和的问题

我来帮你分析下你遇到的问题核心:你的递归终止条件逻辑没处理好最后一个元素的奇偶判断,同时遍历的边界条件也有漏洞。

原代码的问题分析

你当前的终止条件if(i>=matriz.length-1 && j>=matriz[i].length-1)是当走到矩阵最后一个元素时直接返回它的值——这就导致如果最后一个元素是奇数(比如你例子里的55),也会被强行加到总和里。而如果改成返回0,又会直接跳过最后一个元素的判断,不管它是不是偶数都没被计算。

另外,你的遍历逻辑只处理了“当前行最后一列”和“非最后一列”的情况,但没考虑到整个矩阵遍历完成的边界(比如i已经超出矩阵行数的时候),这会导致递归逻辑不够严谨。

修正后的递归逻辑

我们需要调整递归的判断顺序,先处理“遍历完所有行”的终止条件,再处理“当前行遍历完”的情况,最后对每个元素做奇偶判断:

  • 当i >= matriz.length:说明所有行都遍历完了,直接返回0(终止递归)
  • 当j >= matriz[i].length:当前行的元素已经遍历完,递归进入下一行的第一个元素(i+1, 0)
  • 对于当前元素matriz[i][j]:如果是偶数,就把它的值加上下一个元素的递归结果;如果是奇数,直接返回下一个元素的递归结果

修正后的代码

public static void main(String[] args) {
    int matriz[][] = {{1,2,3,4,5},{1,2,3,4,55}};
    System.out.println(sumMatriz(matriz, 0, 0)); // 输出应该是12
}

public static int sumMatriz(int[][] matriz, int i, int j) {
    // 终止条件:所有行都遍历完了
    if (i >= matriz.length) {
        return 0;
    }
    // 当前行遍历完,进入下一行的第一个元素
    if (j >= matriz[i].length) {
        return sumMatriz(matriz, i + 1, 0);
    }
    // 判断当前元素是否为偶数,累加对应的值
    if (matriz[i][j] % 2 == 0) {
        return matriz[i][j] + sumMatriz(matriz, i, j + 1);
    } else {
        return sumMatriz(matriz, i, j + 1);
    }
}

验证结果

用你给出的矩阵{{1,2,3,4,5},{1,2,3,4,55}},偶数是2、4、2、4,总和是12,修正后的代码会正确输出这个结果,不会把最后一个奇数55计入总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:56