簡體   English   中英

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM