【发布时间】:2016-01-23 22:22:00
【问题描述】:
我正在努力解决递归问题,也许我太着迷了,但这里是:
在javascript代码中
var factorial = function(number) {
// If the number is negative, it doesn't have a factorial. Return an
// impossible value to indicate this.
if (number < 0) {
return -1;
}
// If the number is zero, its factorial is one.
if (number === 0) {
return 1;
}
// If the number is neither illegal nor zero, call factorial again,
// this time passing in a smaller number. Eventually we'll reach 0,
// causing each call to return to its caller and the recursion terminates.
return number * factorial(number - 1);
};
factorial(5);
递归函数按预期返回120,但为什么呢?
在绘制逻辑时,有两件事让我很头疼:1)为什么这甚至可以操作,2)虽然可以操作,但为什么不返回 -1?
1) 为什么这还能操作?:
在绘制这个并将 5 作为参数插入时,在底部的 return 语句中,我们得到 return 5 * factorial(5 - 1)。为什么这等于预期的 20?我们不是调用函数返回 5 * factorial(5-1) 的值吗?我们如何将 5 乘以尚未确定的值?如果这只是 5 * (5-1) = 20,那么这很明显,甚至阶乘 (5) * (5-1) = 20 也有意义..
2)虽然可以操作,但为什么不返回-1?:
与上面的情况一样,最终,我们将在递归中达到 1 * factorial(1-1)... 1 * (1-1) = 0 的点。这个函数将数字插入自身进行操作,并且我们的基本情况是“如果插入的整数为零,则停止操作并返回 -1”。为什么这里没有发生这种情况?
抱歉,如果这看起来很简单,我可能会做得比需要的更大。我只是想学习:)。
【问题讨论】:
标签: javascript wordpress recursion factorial