2016-02-06 29 views
0

我正在學習使用Javascript編寫代碼,一個練習是關於返回提供的整數的階乘。例如:5! = 1 * 2 * 3 * 4 * 5 = 120Javascript代碼改進 - 整數析取

我想出了一個結果,它被接受。但是,我不太確定這是解決這個問題的最有效的方法。

任何人都會有關於如何改善此代碼的提示?

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; 
} 

非常感謝!

+0

爲什麼你_array_變量需要什麼? – Grundy

+2

這確實應該在代碼審查。但是搜索也應該產生很多變化,其中一些肯定會通過一個標準或另一個標準得到改進。 – RobG

+1

我會打電話正確縮進支撐陳述的重大改進。 – usr2564301

回答

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); 
    } 
    
+0

這真的很有幫助。非常感謝。 – CaLong

1

你爲什麼不使用

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

while循環少一點代碼:'var n = 5,y = n;而( - n)y * = n;'但實際上是一樣的。 – RobG

+0

@Hemal,謝謝你! – CaLong

+0

@CaLong請接受我的回答 – Hemal

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)! */ 
} 
+0

由於您永遠不會返回值,因此您的原始版本實際上不起作用... –