2017-06-20 57 views
1

除了遞歸地進行階乘之外,我們如何使用for循環解決?因子乘以數字本身

function factorial(num){ 
for(var i=num;i>0;i--){ 
num*=i 
} 
return num; 
} 
factorial(3); 
//18 

答案應該是6,但打印18

當我運行這段代碼說任何數x,階乘的結果再次通過X相乘。 階乘(3)給出了6 * 3 ... 階乘(5)提供了120 * 5.什麼可能是問題?.Thanks

+0

沒有[這](https://www.natashatherobot.com/factorials-javascript-recursion/)幫助? – marcellothearcane

+0

如果你把這行改爲'for(var i =(num - 1); i> 0; i--){'它有效。另外,factorial(0)= 1,所以你需要一個if/else語句來排序。 ('if(num === 0){return 1} else {[for loop]}')它不處理負數,這將需要整理出來。 – marcellothearcane

回答

1

您已經NUM作爲結果的價值,你這個值再乘以它。你可以用下一個較小的值開始迭代,並按照你已經做的迭代。

function factorial(num) { 
 
    for (var i = num - 1; i > 0; i--) { 
 
     num *= i; 
 
    } 
 
    return num; 
 
} 
 
console.log(factorial(3));

隨着while循環,並用一前綴減量較短比較。

function factorial(num) { 
 
    var i = num; 
 
    while (--i) { 
 
     num *= i; 
 
    } 
 
    return num; 
 
} 
 
console.log(factorial(3));

0

你用相同的數量乘以兩倍,你與NUM初始化我,使用I = NUM​​-1這樣的:

function factorial(num){ 
    for(var i=num-1;i>0;i--){ 
    num*=i 
} 
    return num; 
} 
factorial(3) 
+2

添加一些解釋 – brk

+0

@brk您應該開始使用下一個較小的值進行迭代,因爲您已經使用編號分配了num。 – Dij

0

你乘以本身的數量,這個不用做。 只需要乘以小於給定數字的數字即可得到階乘。

下面是相同的代碼片段:

function factorial(num){ 
    for(var i=num-1;i>0;i--){ 
     num*=i 
    } 
    return num; 
} 
factorial(3);