javascript - 行列式函数中的 NaN?

标签 javascript algorithm debugging nan determinants

我有以下代码用于形成矩阵并找到它的行列式 :-

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);

也许您打算调用它(通过将 () 放在末尾)。目前尚不清楚为什么需要像那样内联定义它。


旁注:您的代码正在成为我所说的 The Horror of Implicit Globals 的牺牲品。您需要在需要它们的最内层范围内声明您的变量。我没有看到 tijp 的声明...强烈建议使用 strict mode 所以显示为错误。

关于javascript - 行列式函数中的 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53608231/

相关文章:

javascript - 从父级插入 JS/JavaScript 代码到 iframe

javascript - JS : Repeated string (Hackerrank Challenge)

c++如何从 vector 中找到总和为给定数字的元素的最小数量

c++ - 在 CLion 中调试时程序收到段错误

C++ 从命令行附加 Visual Studio 调试器

C# Mono 软调试器

php - 如何组织所有js、css、php和html代码?

javascript - Phoenix 的 Socket.js 何时触发 onConnError 与 onError 回调?

Javascript 迭代 Json 数组获取值

algorithm - 构建或查找 "relevant terms"建议功能