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

矩阵最大和路径求解JS代码报错,请求问题排查帮助

矩阵最大路径和递归代码错误排查与修复

错误根源

  • 索引顺序错误:代码中使用matrix[x][y]访问矩阵元素,但x是列索引、y是行索引,矩阵的正确访问方式应为matrix[y][x](先取行,再取列)。
  • 递归越界未拦截:当递归到最后一列(x = m-1)时,继续调用y+1会让y超出矩阵的行范围(矩阵只有n行,索引最大为n-1),此时matrix[y]为undefined,读取其属性就会触发Cannot read properties of undefined错误。

修复后的代码

const foo = (matrix, n = matrix.length, m = matrix[0].length, x = 0, y = 0) => {
  // 新增越界判断,提前终止无效递归
  if (y >= n || x >= m) return 0;
  // 到达终点返回当前元素值
  if (x === m - 1 && y === n - 1) return matrix[y][x];
  // 可同时向右、向下走时取最大值
  if (x < m - 1 && y < n - 1) {
    return matrix[y][x] + Math.max(
      foo(matrix, n, m, x + 1, y),
      foo(matrix, n, m, x, y + 1)
    );
  }
  // 仅能向下走(已到最后一列)
  if (x === m - 1) return matrix[y][x] + foo(matrix, n, m, x, y + 1);
  // 仅能向右走(已到最后一行)
  if (y === n - 1) return matrix[y][x] + foo(matrix, n, m, x + 1, y);
};

const matrix = [
  [4, 2, 9, 6],
  [7, 1, 12, 11],
  [10, 13, 3, 8]
];

console.log(foo(matrix)); // 输出:46

额外优化说明

新增的if (y >= n || x >= m) return 0是为了拦截所有超出矩阵范围的递归调用,避免出现无效的元素访问。同时修正了所有矩阵元素的索引顺序,确保访问的是正确的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:21