递归计算矩阵所有偶数和时的逻辑异常求助
解决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
相关产品推荐
相关产品推荐

