以下是代码。你可以自己测试它。函数返回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