簡體   English   中英

應該返回布爾值的函數返回未定義

[英]Function supposed to return a boolean returns undefined

試圖提出一個檢查數字是否為質數的函數,而我遇到了麻煩。 我敢肯定有一種更簡單的方法來執行此操作,但是為什么對於數字9,此函數為什么不返回false? 對於偶數,它返回false,但是對於其他任何類型的復合數,它都返回undefined,但是由於它打印的是NOT PRIME,它也應該返回false。

function isPrime(n, i) {
    document.writeln(i);
    var nextNum = i + 1;
    var number = n;
    if (i < n) {
        if ((n % i) === 0) {
            document.writeln("NOT PRIME");
            return false;
        } else {
            document.writeln(nextNum);
            isPrime(number, nextNum);
        }
    } else if (i === n) {
        document.writeln("Recursion ends");
        return true;
    } else {
        document.writeln("Confused" + typeof i + typeof n);
    }
}

您需要返回遞歸調用的值,即更改

isPrime(number, nextNum);

return isPrime(number, nextNum);

遞歸調用isPrime之后,您在此分支中缺少返回值:

    if ((n % i) === 0) {
        document.writeln("NOT PRIME");
        return false;
    } else {
        document.writeln(nextNum);
        isPrime(number, nextNum);
    }

我認為您想將其更改為:

    if ((n % i) === 0) {
        document.writeln("NOT PRIME");
        return false;
    } else {
        document.writeln(nextNum);
        return isPrime(number, nextNum);
    }

因為您沒有在該分支中返回任何內容,所以對/錯調用消失了。

它只需要一個參數來檢查是否為素數。

試試看:

function isPrime(num){

    // An integer is prime if it is not divisible by any prime less than or equal to its square root
    var squareRoot = parseInt(Math.sqrt(num));
    var primeCountUp = function(divisor){
        if(divisor > squareRoot) {
            // got to a point where the divisor is greater than 
            // the square root, therefore it is prime
            return true;
        }
        else if(num % divisor === 0) {
            // found a result that divides evenly, NOT prime
            return false;
        }
        else {
            // keep counting
            return primeCountUp(++divisor);
        }
    };

    // start @ 2 because everything is divisible by 1
    return primeCountUp(2);

}

此處添加“平方根”的高點

暫無
暫無

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

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