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

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
}
  1. 当当前行长度相等时,你调用了mismasFilas(...)但没有把这个调用的结果返回出去——这就相当于递归执行了,但它的结果被直接丢弃,当前函数还是会走到最后返回sol=true。
  2. 最后一行的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:29:08