[英]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.