2017-03-17 41 views
-1

在第二章使用Javascript的第二个练习中,我不明白如何通过n50等于零并返回true?Eloquent Javascript中的递归练习

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 

如果我在控制台输入:

>var x = 50; 
>50 == 0; 
>false 

返回FALSE。为什么是这样?我不是英语母语的人,所以也许我没有正确阅读JS代码中的东西?

+2

这很明显是错误的,所以请注意下一个。 '50 == 1'也是错误的,所以请跳过。 '50 <0'也是错误的,所以最后'return isEven(n-2)',它再次运行该函数,但是与48一样。重复46,44 ... 4,2,0。 '0 == 0'是真的。 –

+1

遍历调试器中的代码。 – 2017-03-17 19:33:11

+0

当然,你可以只是'返回n%2 == 0'而不是... –

回答

1

如果传递50到ISEVEN函数,那么if语句被执行如下:

else 
    return isEven(n - 2); 

这样就打开了继续减ň,直到它变成0。在这一点上if (n == 0)条件被触发递归调用堆栈然后返回到整个堆栈。

如果数字不均匀,那么最终结果将是n==1条件将是真实的并且将返回false。