我有这个简单的阶乘函数。它适用于递归。然而,我最后得到的数字是NaN。我期待输出为6,因子为3.问题是因为我将x定义为全局变量?如果是这样,如何在函数内部将变量定义为局部变量而不使其在递归中更改。
var x;
function factorial(num)
{
if (num > 0) {
x = num * factorial(num - 1);
}
return x;
}
console.log(factorial(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