【问题标题】:GCD in JS - Maximum call stack exceededJS中的GCD - 超出最大调用堆栈
【发布时间】:2015-12-09 19:39:37
【问题描述】:

这是我为计算 GCD 而编写的递归代码:

function gcd(n1, n2) {
    if(n1<n2) {
        return gcd(n1, n2-n1);
    }
    else if(n2<n1) {
        return gcd(n1-n2,n2);
    }
    else{
        return n1;
    }
}
console.log(gcd(process.argv[2], process.argv[3]));

它给了我一个范围错误。知道为什么吗? :(

编辑:

我删除了标准输入并用随机数替换它,它工作正常。

我想知道为什么它第一次没有工作......

【问题讨论】:

  • 什么是process.argv?
  • 请阅读How to Ask。密切关注MCVE
  • 假设这是一个 Node 应用程序,用于运行它的 exact 命令行是什么?
  • 您可能正在调用一个参数为零。比函数永远不会成功
  • 运行它的确切命令是:node "filename" 119 68

标签: javascript range greatest-common-divisor


【解决方案1】:

试试这个:

function gcd(n1, n2) {
    if(n1<n2) {
        return gcd(n1, n2-n1);
    }
    else if(n2<n1) {
        return gcd(n1-n2,n2);
    }
    else{
        return n1;
    }
}
console.log(gcd(parseInt(process.argv[2]), parseInt(process.argv[3])));

我认为 JavaScript 的类型强制导致了问题。使用原始版本,我可以让它得到这样的调用堆栈溢出错误:

node gcd.js 3 11

【讨论】:

    【解决方案2】:

    始终知道或检查您尝试访问其索引的数组的大小。如果您遇到范围错误,则表示数组不是您认为的大小,因此第 1 步是找出您的期望与现实不符的原因。

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 1970-01-01
      • 2020-01-05
      • 2013-08-19
      • 2012-06-26
      • 1970-01-01
      • 2015-10-24
      • 2015-12-29
      • 2017-12-27
      相关资源
      最近更新 更多