矩阵最大和路径求解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
相关产品推荐
相关产品推荐

