return isEven(-number);雄辩的javascript

时间:2017-01-24 02:05:28

标签: javascript function recursion eloquent

我正在进行http://eloquentjavascript.net/03_functions.html的练习,并且很难理解递归练习的特定部分。练习要求根据作为参数输入的值打印true或false。

在尝试这个练习之后,我意识到我使用了错误的技术,在查看解决方案后,我很困惑第二个if if语句如何工作,检查输入的参数是否为负值。

function isEven(number){
    if (number == 0){
        return true;
    } else if (number == 1){
        return false;
    } else if (number < 0){
        return isEven(-number );
    } else {
        return isEven(number -2);
    }
}
console.log(isEven(-2)); // true
console.log(isEven(-5)); // false

我对如何从自身减去负值例如return isEven(-number )感到困惑,提供了truefalse值。例如-5 -(-5) = 0所以这将返回true,但-5不是偶数值,它是奇数。

我能否解释一下这个递归代码如何使用减去参数?

2 个答案:

答案 0 :(得分:1)

你对-number的作用有一点误解。这不是从自身中减去数字,而是产生数字的负数,例如-5 =&gt; 52 =&gt; -2

我会说,这段代码有很多方法可以清理 - 第一个也是最重要的一点是,通过使用模运算符(%来测试均匀性或奇怪性是非常容易的。 ),返回将数字除以另一个数字的余数。在这种情况下,以2为模的所有奇数整数将返回1,并且所有偶数都将返回0.这几乎在所有方面都是一种更好的方法来解决这个问题,而不是递归0.一般的经验法则 - 如果您使用高级语言进行递归以执行基本算术,则可能有一个更简单的解决方案。

答案 1 :(得分:0)

负号将负数转换为正数,这样第二个递归情况可以继续减去2,直到达到其中一个基本情况(0或1),然后告诉你它是偶数还是奇数:)