Can someone explain how you are mistaken in this function expression?

I understand the first part if, but not the second part, declaring "since" n "is not equal to zero, returns" n "to an even function modified by the logical operator NOT (!)."? Doesn't that return 4 if I were to pass 5 as an argument fn();?

var fn = function even (n)
{
    if (n === 0)
    {
        return true;
    }
    else 
    {
        return !even(n - 1)
    }    
};

fn(5); //=> false
+4
source share
4 answers

Not a function is evenmodified by a logical NOT, but NOT is applied to the result of calling the function evenwith n - 1. Not 4 is returned, but !(even(4)).

If we simplify the function

function even(n) { return n==0 || !even(n-1); }

we get the following extension of your call:

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
+5
source

even(n) even(n-1).

even(0) - true, even(1) - false ..: 2 true, false.

log [0,1,2,3,4,5].map(even).


, , , , , . :

function even(n){
    return !(n%2);
}
+7

, , , ! . :

var fn = function even (n){
  if (n === 0)  return true;
  else return even(n - 1)
}

true, 0. fn(3), :

fn(3)
  -> fn(2)
    -> fn(1)
      -> fn(0)
        true
      true
    true
  true
true

! , :

fn(3)
  -> fn(2)
    -> fn(1)
      -> fn(0)
        true
      !true
    !(!true)
  !(!(!true))
!(!(!(!true)))

!(!(!(!true))) === true

+2

, , (. ) . , , , , n , n-1. , (5) (4), (4) , (3) ( (3)). , (5) !!!!! (0). , (0) true, !! , ! true false.

- , , , , , .

0
source

All Articles