2015-06-26 21 views
0

以下是代码。你可以自己测试它。函数返回undefined,尽管变量具有值

请解释一下:)

var factorial = 1; 

function factorialize(num) { 
    factorial *= num; 

    if (num == 1) { 
    var result = factorial; 

    return result; 
    } 

    factorialize(num-1); 

} 

factorialize(5); 
+3

'返回factorialize(NUM-1);' – mostruash

+0

变化'factorialize(NUM-1);'到'返回factorialize(num-1);' – fuyushimoya

+0

这些不足以解决代码中非常重要的其他问题。 – Alnitak

回答

3

它不需要全局变量,没有局部变量了。

function factorialize(num) { 
 
    if (num === 1) { 
 
     return 1; 
 
    } 
 
    return num * factorialize(num - 1); 
 
} 
 

 
console.log(factorialize(5)); 
 

 
// or a very short version: 
 
function f(n) { return +!~-n || n * f(n - 1); } 
 

 
console.log(f(10));

+0

不错 - 你实际上修正了算法:) – Alnitak

+0

谢谢!你的解决方案要好得多。我可以看到我的确是有缺陷的。如果我两次调用函数,答案将不正确,但全局变量也不是一个好主意。感谢您提供更好的解决方案! – ErgoProxyBG

0

,如果你使用递归你不需要一些变量。这是关于递归最有趣的事情之一。

在此短得多的递归溶液请看:

function factorial(n) 
 
{ 
 
    return (n === 1) ? 1 : n * factorial(n - 1); 
 
} 
 

 
for (var i = 1; i <= 7; i++) 
 
    document.getElementById("myDiv").innerHTML += (i + "! = " + factorial(i) + "<br/>");
<div id="myDiv"> 
 
</div>

+0

它甚至更短:函数f(n){return +!〜-n || n * f(n-1); }' –