2015-06-26 56 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); }' –