我只是使用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语句捕获。
任何有助于我理解的指示都会非常感激。
干杯。
答案 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;
}