即使我正在学习JavaScript,我想出了Factorials的这个解决方案,我想得到一些反馈。
.*
我在网上找到的另一种方式很容易阅读和理解,我只是想不出这种方式。
非递归
function factorialize(num) {
var total= [];
if(num!==0){
for(var i=1; i<=num; i++){
total.push(i);
}
var newTotal = total.reduce(function(a,b){
return a*b;
});
return newTotal;
}else {
return 1;
}
}
console.log(factorialize(6));
递归:
var factorial = function(n) {
if(n == 0) {
return 1
} else {
product = 1;
for(i = 1; i <= n; i++) {
product *= i;
}
return product;
}
}
console.log(factorial(num));
答案 0 :(得分:1)
你的解决方案是合理的,虽然可以批评的是,它对记忆有点浪费。其他版本只需要将一个中间值保持为状态(假设递归版本的尾调用优化),而您的算法依赖于长度为n的数组。您可以使用生成器而不是列表来避免这种情况。