Java递归判断矩阵尺寸是否一致:return false语句未正常退出方法的问题排查
问题分析与修复方案
嘿,我来帮你排查这个递归方法的问题~你的代码核心问题在于递归调用的结果没有被正确返回,而且最后固定返回初始值sol=true,这就导致就算深层递归发现了行长度不匹配返回false,上层函数也无法拿到这个结果,最终还是返回true,看起来像是return false没生效。
具体问题拆解
咱们逐行看你的代码:
public static boolean mismasFilas(int[][] m1, int[][] m2, int fila) { boolean sol = true; int k = 0, h = 0; // 这两个变量没用到,可以删掉哦 if (fila >= 0) { if (m1[fila].length != m2[fila].length) { return false; // 这里的逻辑是对的,但递归分支没处理好 } else { mismasFilas(m1, m2, fila - 1); // 这里调用了递归,但没有返回结果! } } return sol; // 不管递归过程怎样,最后都返回true }
- 当当前行长度相等时,你调用了
mismasFilas(...)但没有把这个调用的结果返回出去——这就相当于递归执行了,但它的结果被直接丢弃,当前函数还是会走到最后返回sol=true。 - 最后一行的
return sol会覆盖所有递归过程的结果,哪怕深层递归返回了false,上层函数也不会传递这个值。
修复后的代码
我们可以简化代码,去掉无用变量,同时确保递归结果被正确返回:
public static boolean mismasFilas(int[][] m1, int[][] m2, int fila) { // 先判断两个矩阵总行数是否相等,避免数组越界 if (m1.length != m2.length) { return false; } // 递归终止条件:所有行都检查完毕,返回true if (fila < 0) { return true; } // 当前行长度不匹配,直接返回false,终止递归 if (m1[fila].length != m2[fila].length) { return false; } // 递归检查上一行,并把递归结果返回给上层 return mismasFilas(m1, m2, fila - 1); }
修复逻辑说明
- 新增总行数判断:如果两个矩阵的总行数不一样,直接返回
false,避免后续递归出现数组越界异常。 - 递归终止条件:当
fila < 0时,说明所有行都检查过且匹配,返回true。 - 正确传递递归结果:每次递归调用时都用
return把结果传回上层,这样一旦某一行发现不匹配,return false会沿着递归栈直接往上返回,立刻终止整个递归过程;如果所有行都匹配,最终会走到终止条件返回true。
调用示例
调用这个方法时,记得传入初始行索引为矩阵最后一行的下标,比如:
int[][] matrix1 = {{1,2}, {3,4}}; int[][] matrix2 = {{5,6}, {7,8}}; boolean result = mismasFilas(matrix1, matrix2, matrix1.length - 1);
内容的提问来源于stack exchange,提问作者FunMoonicorn
相关产品推荐
相关产品推荐

