递归因子。为什么我会得到NaN

时间:2015-04-22 02:14:54

标签: javascript recursion

我有这个简单的阶乘函数。它适用于递归。然而,我最后得到的数字是NaN。我期待输出为6,因子为3.问题是因为我将x定义为全局变量?如果是这样,如何在函数内部将变量定义为局部变量而不使其在递归中更改。

var x;
function factorial(num)
{

    if (num > 0) {
       x =  num * factorial(num - 1);
    }
    return x;
}


console.log(factorial(3));

3 个答案:

答案 0 :(得分:4)

如果num > 0,则定义x。当x num时,> 0是什么?

提示:应该是1。 ISN'吨。 :)

HINT2:尝试console.log(1 * undefined)

P.S。:是的,var x应该进入函数内部。不,在这种情况下,它没有做任何坏事,但它可以。

答案 1 :(得分:1)

您需要先使用值初始化x

var x = 1;

答案 2 :(得分:1)

让我们仔细调查发生的事情:

f(3) = 3 * f(2);
f(2) = 2 * f(1);
f(1) = 1 * f(0);

对于f(0),它直接转到return x;,而您的全局变量var x;未初始化,因此f(0)返回undefined,{{1获取1 * factorial(0),传播到最终结果。

一种解决方案是不使用全局变量:

NaN