有人可以解释你在这个函数表达式中如何得到错误吗?

Ant*_*tiz 4 javascript

我理解了第一部分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)

Den*_*ret 7

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)


Ber*_*rgi 5

不是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)