为什么我的阶乘函数总是返回一个?

时间:2015-05-12 01:33:31

标签: javascript arrays

我正在尝试编写一段代码来解决Coderbyte挑战,以计算一个数字的阶乘。每次运行它时,生成的阶乘就是一个。我究竟做错了什么?

var num
var array1 = new Array();

function FirstFactorial(num) {     
    for (var i = num; i>0; i--){        // 8 , 7, 6 , 5
        for (var y = 0; y<num ; y++){   // 0, 1, 2, 3, 4
        array1[y]=i;       // we have an array that looks like [8,7,6,5,4,3,2,1]
        };
    };
    var sum = 1
    for (var x = 0; x<array1.length; x++){  // now I want to run up that array, reading the #s
        sum = sum * array1[x];
        return sum;
    };
    return sum
};

2 个答案:

答案 0 :(得分:0)

这是计算数字阶乘的一种更简单的方法。

function factorial(num)
{
 if(num === 1)
 {
   return num;
 }
 return num * factorial(num - 1);
}

但是要修复代码,您需要修复将数字加载到数组中的初始循环。以及删除底部循环中的return语句。像这样。

function FirstFactorial(num) {     
    for (var i = num; i>0; i--) {
        array1[num - i] = i;
    };
    var sum = 1
    for (var x = 0; x < array1.length; x++){  // now I want to run up that array, reading the #s
        sum = sum * array1[x];
    };
    return sum
};

答案 1 :(得分:0)

一些问题。

1 /这是次要的,但是,当你乘以两个数字时,你会得到一个产品,而不是一个总和。

2 /你在循环中从返回了值,这意味着即使你修正了其他问题,它也会过早地返回而不会使所有数字成倍增加。

3 /您的嵌套循环没有按照您描述的方式填充数组,您应该在填充后检查它。想想你的循环表示为伪代码:

for i = num downto 1 inclusive:
    for y = 0 to num-1 inclusive:
        array1[y] = i

您可以看到内部循环使用当前i的值填充整个数组。因此,外部循环的 last 迭代,其中i为1,将整个数组设置为1。

4 /在任何情况下,您都不需要数组来存储从1到n的所有数字,只需使用数字1到n直。类似的东西(再次,伪代码):

def fact(n):
    prod = 1
    for i = 2 to n inclusive:
        prod = prod * i
    return prod