JS 中的 GCD - 超出最大调用堆栈

GCD in JS - Maximum call stack exceeded

这是我为计算 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]));

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

编辑:

我删除了 stdin 并用随机数替换它,它工作正常。

我想知道为什么它第一次不起作用...

始终知道或检查您尝试访问其索引的数组的大小。如果您遇到范围错误,则意味着数组不是您认为的大小,因此第 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