javascript - NaN超出行列式函数?
问题描述
我有以下代码用于形成矩阵并找到它的行列式:-
function matrix(m, n, arr) {
var result = {};
for (t = 1; t <= m; t++) {
result[t] = {};
}
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++) result[i][j] = arr[n * (i - 1) + j - 1];
return { result: result, m: m, n: n };
}
function det(mat) {
if (mat.m == mat.n) {
if (mat.m != 1) {
var k = mat.m;
var result = 0;
var temp = [];
for (i = 1; i <= k; i++) {
result +=
(-1) ** (1 + i) *
mat.result[1][i] *
function() {
for (t = 1; t <= k; t++) {
for (p = 1; p <= k; p++) {
if (t != 1 || p != i) {
temp.push(mat.result[t][p]);
}
return det(matrix(k - 1, k - 1, temp));
}
}
};
}
} else {
return mat.result[1][1];
}
return result;
} else {
return;
}
}
在执行类似det(matrix(2,2,[2,3,1,4]))
它的函数时返回 NaN。
请帮我解决意外的结果。
解决方案
您将一个值乘以一个函数对象:
result +=
(-1) ** (1 + i) *
mat.result[1][i] * // Here
function() { // ..
for (t = 1; t <= k; t++) {
for (p = 1; p <= k; p++) {
if (t != 1 || p != i) {
temp.push(mat.result[t][p]);
}
return det(matrix(k - 1, k - 1, temp));
}
}
}; // Note no () calling it
将函数对象视为数字会导致NaN
:
var a = 1 * function() { };
console.log(a);
也许您打算调用它(通过放在()
末尾)。目前尚不清楚为什么您需要像这样内联定义它。
旁注:您的代码正在成为我所说的隐式全局恐怖的牺牲品。您需要在需要它们的最内层范围内声明变量。我没有看到t
, i
, j
, p
... 的声明 强烈建议使用严格模式,这样会显示为错误。
推荐阅读
- ios - Xamarin - IOS - 电池使用情况
- sql-server - Sql-DBCC 收缩数据库不减少数据库大小
- amp-html - 如何链接 Google AMP 页面
- reporting-services - 报告:拆分字符串并在矩阵表中显示每列中的每个值
- webpack - 前端工作流程——webpack、grunt、browserify?
- vba - Excel VBA VLookup 运行时错误“1004”
- python - 将单个数组维度写入 Excel 工作表
- angular - Tinymce Angular 2 响应式文件管理器
- selenium - 删除“TooLongFrameException”限制 (http)
- java - 如何向具体用户发送 websocket 消息?