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

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

最佳答案

最后一个else块的主体正在实现递归。

对于任何整数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)或0是偶数,第2个也是偶数(规则4)。
0是偶数(规则1),所以6也是偶数。


因此,isEven()函数通过一次减少问题来确定整数是否为偶数:


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

关于javascript - 这段代码如何返回未定义的值,请在函数中最后解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47088043/

10-09 22:32