以下是代碼。你可以自己測試它。函數返回undefined,儘管變量具有值
請解釋一下:)
var factorial = 1;
function factorialize(num) {
factorial *= num;
if (num == 1) {
var result = factorial;
return result;
}
factorialize(num-1);
}
factorialize(5);
以下是代碼。你可以自己測試它。函數返回undefined,儘管變量具有值
請解釋一下:)
var factorial = 1;
function factorialize(num) {
factorial *= num;
if (num == 1) {
var result = factorial;
return result;
}
factorialize(num-1);
}
factorialize(5);
它不需要全局變量,沒有局部變量了。
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));
不錯 - 你實際上修正了算法:) – Alnitak
謝謝!你的解決方案要好得多。我可以看到我的確是有缺陷的。如果我兩次調用函數,答案將不正確,但全局變量也不是一個好主意。感謝您提供更好的解決方案! – ErgoProxyBG
,如果你使用遞歸你不需要一些變量。這是關於遞歸最有趣的事情之一。
在此短得多的遞歸溶液請看:
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>
它甚至更短:函數f(n){return +!〜-n || n * f(n-1); }' –
'返回factorialize(NUM-1);' – mostruash
變化'factorialize(NUM-1);'到'返回factorialize(num-1);' – fuyushimoya
這些不足以解決代碼中非常重要的其他問題。 – Alnitak