该函数det2by2(m)计算 2x2 矩阵的行列式,该函数detNbyN(m)计算任意大小矩阵的行列式。函数minor(m, num)计算矩阵minor,这里num是矩阵第一行数的索引。代码末尾的矩阵行列式应该等于 62,但控制台中显示的是 48,假设的问题点标记为 *。应该如何更改代码以便正确计算行列式?
function determinant(m) {
function det2by2(m) {
return m[0][0] * m[1][1] - m[0][1] * m[1][0];
}
function detNbyN(m) {
const firstRow = m[0];
if (firstRow.length === 2) return det2by2(m);
let sum = 0;
for (let i = 0; i < m.length; i++) {
sum += firstRow[i] * (-1) ** 2 + i * detNbyN(minor(m, i)); // *
}
return sum;
}
function minor(m, num) {
const m1 = JSON.parse(JSON.stringify(m));
m1.splice(0, 1);
for (let elem of m1) {
elem.forEach((el, i) => {
if (i === num) elem.splice(i, 1);
});
}
return m1;
}
if (m.length === 1) return m[0][0];
if (m.length === 2) return det2by2(m);
if (m.length >= 3) return detNbyN(m);
};
console.log(determinant(
[
[2, 4, 2, 2],
[3, 1, 1, 2],
[1, 2, 0, 2],
[3, 4, 5, 6]
]
)); // **
**是否进行幂运算。让我们使用函数Math.pow。(-1)^(i),其中i=0, 1, 2...。如果还有语言相关的问题,那我就不再是这里的助手了。
minor我无法检查函数,它使用了特殊的 JS 函数。也许你想写
虽然通常最好按照教科书的方式编写:
- 毫不含糊地,清楚地,没有必要为放置括号而受苦。