2017-02-20 73 views
1

我正在經歷FreeCodeCamp挑戰之一。通過創建數組並對其進行乘法來對數字進行階乘化

「返回所提供的整數的階乘。

如果整數與字母n來表示,一個階乘是所有正整數小於或等於n的 產物。

階乘往往與速記符號代表N

例如:!5 = 1 * 2 * 3 * 4 * 5 = 120「

我已經知道最簡單的方法是使用遞歸,但到了發現這個事實的時候,我已經試圖通過創建一個數組來解決這個問題,並將數字與它們相乘。不過,我被困在這一步。我已經根據函數factorialize參數創建了一個數字位數的數組,但是我無法獲得這些數字的乘積。我做了什麼錯:

function factorialize(num) { 
    var array = []; 
var product; 
    for(i = 0; i<=num;i++) { 
array.push(i); 
for (j=0; j < array.length; j++) { 
    product *= array[j]; 
} 
return product; 
} 
} 
factorialize(5); 
+3

您正在推送'0'作爲第一個元素。所以自然產品也將是'0'。 –

+1

您還應該將'product'初始化爲'1'。 –

+0

關鍵是該函數返回NaN,甚至不是0 :) –

回答

1

1)你必須初始值的 '產品' 可變 2)你應該改變I = 0到1.你在循環中乘以0 3)你不需要ed嵌套循環

function factorialize(num) { 
    var array = []; 
    var product = 1; 
    for(var i = 1; i <= num; i++) { 
    array.push(i); 
    } 
    for (j=0; j < array.length; j++) { 
    product *= array[j]; 
    } 
    return product; 
} 
2

我認爲最簡單的方法是創建一個範圍,並減少:

var n = 5; 
 

 
function factorize(max) { 
 
    return [...Array(max).keys()].reduce((a,b) => a * (b + 1), 1); 
 
} 
 

 
console.log(factorize(n));

2

它看起來像你錯過了一個右括號

function factorialize(num) { 
    var array = []; 
    var product = 1; 
    for(i = 0; i<=num;i++) { 
    array.push(i); 
    }      //right here!!! <---- 
    for (j=0; j < array.length; j++) { 
    product *= array[j]; 
    } 
    return product; 
} 

factorialize(5); 

但正如評論中所述,你應該通過ge i = 0i = 1不僅僅因爲它會改變最終結果(它對所有num都會改變),而是因爲它也不遵循階乘算法。

+0

有很多錯誤 –

+0

對不起,但在哪裏? –

+0

'return product;'和'product'應該用'1'初始化。 –

0

,您只需要1爲一個循環, 最大數,那麼你乘起來, 只是一點點從你的代碼 事實變量清理將包含個人數字組成的字符串版本綜上所述

如果m是5你會實際上將是1 * 2 * 3 * 4 * 5

function factorialize(num) { 
    var product = 1; 
    var fact = "" 
    for (i = 1; i <= num; i++) { 
    product *= i; 
    fact += i + "*" 
    } 
    fact = fact.substring(0, fact.length - 1) 
    console.log(fact) 
    return product; 
} 
console.log(factorialize(5));