Javascript 此代码如何不返回undefined,请解释函数中的最后一个else

Javascript 此代码如何不返回undefined,请解释函数中的最后一个else,javascript,Javascript,我不明白当一个非0的数字等于0并返回true为偶数时,该代码如何不返回undefined,我尤其不理解函数中最后一个else语句 function isEven(n) { if (n == 0) return true; else if (n == 1) return false; else if (n < 0) return isEven(-n); else return isEven(n - 2); } console.log(isE

我不明白当一个非
0
的数字等于
0
并返回true为偶数时,该代码如何不返回
undefined
,我尤其不理解函数中最后一个
else语句

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


console.log(isEven(50));
// → true
console.log(isEven(75));
// → false
console.log(isEven(-1));
// → false
函数isEven(n){
如果(n==0)
返回true;
else如果(n==1)
返回false;
else if(n<0)
返回isEven(-n);
其他的
返回isEven(n-2);
}
控制台日志(isEven(50));
// → 真的
控制台日志(isEven(75));
// → 假的
console.log(isEven(-1));
// → 假的

这是递归函数。它从初始数字中减去2,直到0表示偶数,或1表示奇数。它还能够通过在第一次使用-n进行迭代时将负数转换为正数来检查负数


为了更好地理解它,只需选择一个值,例如10,然后在纸上一步一步地写。

前两个if子句很明显

第三个:如果是负数,请使用正数再试一次(即,-3将使用3再试一次)

第四个:输入大于2,请使用相同的数字减去2重试。(即3将使用1重试,因此最终返回false。)


因此,给定任何数字(至少是任何整数),它将递归,直到它测试零或一为止,因此返回true或false。

最后的
块的主体正在实现递归

对于任意整数n,我们知道以下规则:

  • 如果n为0,则n为偶数
  • 如果n是1,则n不是偶数
  • 如果n为负,则n为偶数当且仅当-n为偶数
  • 否则,n是偶数当且仅当(n-2)是偶数
  • 例如,检查-4是否为偶数:

    • -4小于0,所以如果+4为偶数,-4为偶数(规则#3)
    • 4既不是0也不是1,所以4是偶数(4-2),或者2是偶数(规则4)
    • 2既不是0也不是1,所以2是偶数(2-2),或者0是偶数(规则4)
    • 0是偶数(规则#1),因此6也是偶数
    因此,
    isEven()
    函数通过一次减少一个步骤来确定整数是否为偶数:

    • isEven(-4)
      是第三种情况,因此
      isEven(-4)
      的答案与
      isEven(4)
      的答案相同
    • isEven(4)
      与前三种情况中的任何一种都不匹配,因此它的答案必须与
      isEven(2)
      相同
    • isEven(4)
      与前三种情况中的任何一种都不匹配,因此它的答案必须与
      isEven(0)
      相同
    • isEven(0)
      匹配第一种情况,因此返回true

    “一个不是0等于0的数字”-等等,什么?我只想指出,
    isEven
    函数可以通过
    n=>n%2==0
    简单地实现。