2017-06-20 55 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);