Javascript代码改进 - 整数阶乘

时间:2016-02-06 12:34:01

标签: javascript algorithm 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;
} 

非常感谢!!

3 个答案:

答案 0 :(得分:3)

您有几种方法可以获得解决方案。

  1. 迭代

    function f(n) {
        var r = n;
        while (--n) {
            r *= n;
        }
        return r;
    }
    
  2. 通过递归

    function f(n) {
        return n === 0 ? 1 : n * f(n - 1);
    }
    

    或非常短的版本

    function f(n) {
        return +!~-n || n * f(n - 1);
    }
    

答案 1 :(得分:1)

为什么不使用

var ans=1;
for (i=1;i<=num;i++)//for(i=num;i>=1;i--)
{
    ans=ans*i;
}
return ans;

答案 2 :(得分:1)

我使用过这种递归方法

function f(p) {
    if (p == 0) return 1;    /* 0! == 1 by definition,    */
    return p * f(p - 1);     /* otherwise p! = p * (p-1)! */
}

更正后的版本(带评论)

:password
相关问题