我不明白当一个不是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/