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

时间:2015-12-09 19:39:37

标签: javascript range greatest-common-divisor

这是我写的用于计算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]));

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

编辑:

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

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

2 个答案:

答案 0 :(得分:0)

始终知道或检查您尝试访问其索引的数组的大小。如果你得到一个范围错误,那么这意味着数组不是你想象的大小,所以第一步就是弄清楚为什么你的期望与现实不符。

答案 1 :(得分:0)

试试这个:

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