理解递归中的负数

时间:2014-10-20 19:57:02

标签: javascript recursion

我只是使用Eloquent Javascript这本书来了解javascript的递归,但是不能完全理解这个小提琴中负数(-1)的情况:

http://jsfiddle.net/greenhulk01/kg5ton1t/

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

我理解这次递归中发生的一切,除了“return isEven(-n);”之外正在处理中。使用console.log我可以看到它作为未定义返回,因此不确定为什么它被false语句捕获。

任何有助于我理解的指示都会非常感激。

干杯。

1 个答案:

答案 0 :(得分:1)

isEven(-n)只是利用了如果-n是偶数,n也是偶数的事实。所以基本上isEven(-10)调用isEven(10)

顺便说一下:你有没有试过isEven(1.5)?我会期待错误,但我猜你会得到堆栈溢出。我把它写成

function isEven(n) {
  if (n < 0) {
    return isEven(-n);
  }
  if (n >= 2) {
    return isEven(n - 2);
  }
  return n == 0;
}; 

BTW 2:不使用递归,你可以写

function isEven(n) {
  return n % 2 == 0;
}