我正在通过Eloquent JavaScript学习JavaScript,练习之一是编写一个递归函数isEven,如果数字为偶数,则返回true;如果数字为奇数,则返回false。

如果我理解正确,那么作者特别希望执行以下操作:


如果数字== 0,则为偶数。
如果数字== 1,则为奇数。
“对于任何数字N,其均匀度都与N-2相同”。


但是,当我使用下面的代码时,出现错误:InternalError: too much recursion (line 3 in function isEven) …如何在仍使用递归函数的同时解决此问题?

// Your code here.
function isEven(n){
  if(n==0){
    return true;
  }
  else if(n==1){
    return false;
  }
  else{
    n = n-2;
    isEven(n);
  }
}

console.log(isEven(50));
// → true
console.log(isEven(75));
// → false
console.log(isEven(-1));
// → ??

最佳答案

您可以在减少/增加值之前添加另一张支票。



function isEven(n) {
    if (n == 0) {
        return true;
    }
    if (n == 1) {
        return false;
    }
    if (n > 0) {
        n = n - 2;
    } else {
        n = n + 2;
    }
    return isEven(n);
}

console.log(isEven(50));
console.log(isEven(75));
console.log(isEven(-1));

10-04 13:23