我理解了第一部分if,但不是第二部分说明"因为'n'不等于零,在用逻辑NOT(!)运算符修改的偶函数中返回'n'."?如果我作为参数传递5,那么不会返回4 fn();吗?
var fn = function even (n)
{
if (n === 0)
{
return true;
}
else
{
return !even(n - 1)
}
};
fn(5); //=> false
Run Code Online (Sandbox Code Playgroud)
even(n)总是与之相反even(n-1).
由于even(0)是true,even(1)是false等:2给出倍数true和奇数放弃false.
查看它的简单方法可能是记录[0,1,2,3,4,5].map(even).
为了防止你真正想要找出一个正整数是否均匀的方法,你展示的解决方案效率非常低,并且递归会导致任何大数字的调用堆栈爆炸.这是一个更合理的解决方案:
function even(n){
return !(n%2);
}
Run Code Online (Sandbox Code Playgroud)
不是even使用布尔值NOT修改函数,而是将NOT应用于调用函数的结果.返回不是4,但是.evenn - 1!(even(4))
如果我们简化功能
function even(n) { return n==0 || !even(n-1); }
Run Code Online (Sandbox Code Playgroud)
我们得到以下扩展您的通话:
even(5)
5==0 || !even(5-1)
!even(4)
!(4==0 || !even(4-1))
!!even(3)
!!(3==0 || !even(3-1))
!!!even(2)
!!!(2==0 || !even(2-1))
!!!!even(1)
!!!!(1==0 || !even(1-1))
!!!!!even(0)
!!!!!(0==0 || !even(0-1))
!!!!!(true || !even(0-1))
!!!!!true
!!!!false
!!!true
!!false
!true
false
Run Code Online (Sandbox Code Playgroud)