簡體   English   中英

FreeCodeCamp挑戰:解釋錯誤消息?

[英]FreeCodeCamp Challenge: Explain error message?

看看我針對FreeCodeCamp的高級算法的解決方案:無重復挑戰

返回沒有重復的連續字母的所提供字符串的總排列數。

正確的代碼應返回2640 有人可以向我解釋這些錯誤消息嗎?

RangeError:超出最大調用堆棧大小
在findFactorial:14:24
在findFactorial:21:14
在findFactorial:21:14
在findFactorial:21:14
在findFactorial:21:14
在findFactorial:21:14

注意:要獲取錯誤所在的確切行號,請在以下位置復制並粘貼代碼: https : //repl.it/

    function permAlone(str) {
        var final, factorial, repeated, i;
        repeated = str.match(/([a-z])(?:.*)(\1)+/g); 
        if (str.length < 2) {
            return 1;
        }

        // should return ["aa", "ff"]
        if (repeated[0] === str) { 
            repeated[0] = repeated[0].split('').sort().join('').match(/([a-z])(?:.*)(\1)+/g);
            repeated = repeated.reduce(function(a, b) {
                return a.concat(b);
            });
        }

        function findFactorial(n) {
            if (n < 0) {
                alert("No negative numbers accepted.");
            }
            if (n === 0) {
                return 1;
            }
            return n * findFactorial(n - 1);
        }

        factorial = findFactorial(str.length); // 7! = 5040

        for (i = 0; i < repeated.length; i++) {
            i++;
            if (repeated.length === 1 && repeated.join("") !== str) {
                final = factorial - findFactorial((str.length - 1)) * findFactorial(repeated[0].length);
            } else if (repeated.length > 1 && repeated[i-1].length>2 || repeated[i].length>2) {
                final = findFactorial(repeated[i].length) * findFactorial(repeated[i - 1].length);
            } else {
                final = factorial - ((findFactorial((str.length - 1) * repeated[i].length) * (findFactorial(str.length - 1) * repeated[i - 1].length))) + (findFactorial(str.length - 2) * findFactorial(repeated[i - 1]) * findFactorial(repeated[i]));
                //  final = 5040 - ((6! * 2!)*2) + (5! * 2! * 2!);
            }
        }
        return final;
    }
    permAlone('abfdefa'); // should return 2640

蒂布薩朝着正確的方向指出了你和我。 傳遞“ aa”或“ ff”的findFactorial將繼續調用自身,直到堆棧崩潰為止。 您可以在對負輸入的檢查(對非整數輸入的檢查)之外向findFactorial添加防彈。 但是與此同時,我在代碼中發現了令人反感的一行:[您將需要向右滾動以查看不良部分以及需要更改的內容,您兩次忘記了.length]

                final = factorial - ((findFactorial((str.length - 1) * repeated[i].length) * (findFactorial(str.length - 1) * repeated[i - 1].length))) + (findFactorial(str.length - 2) * findFactorial(repeated[i - 1]) * findFactorial(repeated[i]));

它應該是,

                final = factorial - ((findFactorial((str.length - 1) * repeated[i].length) * (findFactorial(str.length - 1) * repeated[i - 1].length))) + (findFactorial(str.length - 2) * findFactorial(repeated[i - 1].length) * findFactorial(repeated[i].length));

碰巧的是,這似乎無法給出正確的答案,但確實可以解決您所詢問的錯誤。

暫無
暫無

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

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