Javascript 代码改进 - 整数阶乘
Javascript Code improvement - Integer factorial
我正在学习使用 Javascript 进行编码,其中一项练习是关于返回所提供整数的阶乘。例如:5! = 1 * 2 * 3 * 4 * 5 = 120
我想出了一个结果,被接受了。但是,我不太确定这将是解决此问题的最有效方法。
有人可以提供有关如何改进此代码的任何提示吗?
function factorialize(num) {
var array = [];
for (i = 1; i <= num; i++) {
array.push(i);
}
var multi = 1;
for (var i = 1; i < array.length; i++) {
multi *= array[i];
}
return multi;
}
非常感谢!!
你为什么不用
var ans=1;
for (i=1;i<=num;i++)//for(i=num;i>=1;i--)
{
ans=ans*i;
}
return ans;
您可以通过多种方法获得解决方案。
通过迭代
function f(n) {
var r = n;
while (--n) {
r *= n;
}
return r;
}
通过递归
function f(n) {
return n === 0 ? 1 : n * f(n - 1);
}
或非常短的版本
function f(n) {
return +!~-n || n * f(n - 1);
}
我用过这种递归的方法
function f(p) {
if (p==1) return;
p -= 1;
x = x * p;
f(p);
}
更正后的版本(有评论):
function f(p) {
if (p == 0) return 1; /* 0! == 1 by definition, */
return p * f(p - 1); /* otherwise p! = p * (p-1)! */
}
我正在学习使用 Javascript 进行编码,其中一项练习是关于返回所提供整数的阶乘。例如:5! = 1 * 2 * 3 * 4 * 5 = 120
我想出了一个结果,被接受了。但是,我不太确定这将是解决此问题的最有效方法。
有人可以提供有关如何改进此代码的任何提示吗?
function factorialize(num) {
var array = [];
for (i = 1; i <= num; i++) {
array.push(i);
}
var multi = 1;
for (var i = 1; i < array.length; i++) {
multi *= array[i];
}
return multi;
}
非常感谢!!
你为什么不用
var ans=1;
for (i=1;i<=num;i++)//for(i=num;i>=1;i--)
{
ans=ans*i;
}
return ans;
您可以通过多种方法获得解决方案。
通过迭代
function f(n) { var r = n; while (--n) { r *= n; } return r; }
通过递归
function f(n) { return n === 0 ? 1 : n * f(n - 1); }
或非常短的版本
function f(n) { return +!~-n || n * f(n - 1); }
我用过这种递归的方法
function f(p) {
if (p==1) return;
p -= 1;
x = x * p;
f(p);
}
更正后的版本(有评论):
function f(p) {
if (p == 0) return 1; /* 0! == 1 by definition, */
return p * f(p - 1); /* otherwise p! = p * (p-1)! */
}