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
简单地实现。