这会有效吗?使用JavaScript的因子

时间:2017-05-21 14:14:10

标签: arrays math push reduce factorial

即使我正在学习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));

1 个答案:

答案 0 :(得分:1)

你的解决方案是合理的,虽然可以批评的是,它对记忆有点浪费。其他版本只需要将一个中间值保持为状态(假设递归版本的尾调用优化),而您的算法依赖于长度为n的数组。您可以使用生成器而不是列表来避免这种情况。