Javascript 为什么我的阶乘函数总是返回1?

Javascript 为什么我的阶乘函数总是返回1?,javascript,arrays,Javascript,Arrays,我正试图写一段代码来解决Coderbyte挑战,计算一个数字的阶乘。每次运行它时,生成的阶乘都是1。我做错了什么 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

我正试图写一段代码来解决Coderbyte挑战,计算一个数字的阶乘。每次运行它时,生成的阶乘都是1。我做错了什么

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
};
var num
var array1=新数组();
函数第一阶乘(num){
对于(vari=num;i>0;i--){//8,7,6,5

对于(var y=0;y,这是一种计算数字阶乘的更简单的方法

函数阶乘(num)
{
如果(num==1)
{
返回num;
}
返回num*factorial(num-1);
}
一些问题

1/这是次要的,但当你将两个数字相乘时,得到的是乘积,而不是和

2/您从循环中返回了值,这意味着,即使您修复了其他问题,它也会过早返回,而不会将所有数字相乘

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

for i = num downto 1 inclusive:
    for y = 0 to num-1 inclusive:
        array1[y] = i
def fact(n):
    prod = 1
    for i = 2 to n inclusive:
        prod = prod * i
    return prod
您可以看到,内部循环使用当前
i
的值填充整个数组。因此,外部循环的最后一次迭代(其中
i
为1)将整个数组设置为1

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


问题是什么?您在上一个for循环中返回sum,通过该循环的第一次迭代将返回,而数组的其余部分将不被处理。请描述问题。@Kvera根据Stackoverflow的质量要求,“寻求调试帮助的问题”(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中重现问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。““代码不起作用”这还不够。你有没有说明你为什么认为可能?如果你希望人们免费帮助你,请在这个问题上花最少的精力。honerlawd,非常感谢你的关注。你能向我解释一下为什么最初的循环是错误的吗?你在顶部的外循环运行良好,并且分别倒计时从数字到1。但是,您的内部循环从0到7计数。因此,基本上,您使用内部循环启用的任何数字填充数组中的每个索引,并覆盖以前的所有数字。如果这有意义的话。这不就是它应该做的吗?存储array1[0]=8,array1[1]=7等等?对不起,我当然是新手。在第一次迭代中,它会这样做
[4,4,4]
在下一次迭代中,它会这样做
[3,3,3]
等等,然后停在
[1,1,1]
因为外部循环在
i=0时终止;
的值不太大。在第一次外部迭代时,它将所有数组值设置为
num
。然后将它们全部设置为
num-1
,依此类推,最终在最后一次外部迭代中将它们全部设置为
1