使用 Javascript 数组对数字进行因式分解

Factorialize a number using Javascript arrays

我尝试制作一个函数,它接受一个参数,并将小于参数的每个数字放入到零并将其推入数组(降序)。然后使用 for 循环将数组的每个索引乘以下一个索引,但我的 return 返回 null。请帮忙

function factorialize(num) {
     var arrayOfFactorial = [];
     var factorial = 1;
     for(var i = num;i > 0;i--){
        arrayOfFactorial.push([i]);
        factorial = factorial * arrayOfFactorial[i];
     } 

     return factorial;
}

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

    console.log( factorial);
    return factorial;
}

factorialize(10);

我认为这就是你想要做的..我将 [i] 更改为 i.and arrayOffactorial[i] 到 i

在第一次迭代中,arrayOfFactorial 的长度为 1,i 将等于 num,这将大于 1,您正在尝试访问 arrayOfFactorial[num],这将是未定义的并且这就是你得到 NaN 的原因。 你可以用 i 乘以阶乘。另外你真的不需要另一个数组。

function factorialize(num) {
   var arrayOfFactorial = [];
   var factorial = 1;
   for(var i = num;i > 0;i--){
     arrayOfFactorial.push([i]);  //can be removed.
     factorial = factorial * i;
   } 

   return factorial;
}

console.log(factorialize(10));

1-您正在将一个数组推入 arrayOfFactorial,然后尝试将一个数字与一个数组相乘。虽然它在数学上是合法的,但在 javascript 中却不是。 你应该使用 arrayOfFactorial.push(i);

2-您不需要数组。你可以只使用 factorial = factorial * i

3-根据您的解释,您应该使用 2 个循环。第二个动作,应该在不同的循环中。

4-你return有些东西,但你不打印它。

如果无法解决问题,请查看 Dij 的回答。

您案例中的数组未用于计算。你想做的可能是这样的:

function factorialize(num) {
   var arrayOfFactorial = [];

   // Push all values in the array (order not really important here)
   for(var i = num;i > 0; i--){
     arrayOfFactorial.push(i);
   }

   var factorial = 1;
   for(var i = 0; i<arrayOfFactorial.length; i++) { 
     factorial = arrayOfFactorial[i] * factorial 
   }

   return factorial;
}

console.log(factorialize(10));

也就是说,这样做没有实际意义,因为您的内存使用量会随着您尝试计算的阶乘的大小而增长,并且您实际上不需要保留所有内容的引用。最好的方法是通过直接在 for 循环中乘以阶乘来计算它。像这样:

function factorialize(num) {
   var factorial = 1

   for(var i = num;i > 0; i--){
     factorial = factorial * i
   }

   return factorial;
}

我认为使用 while 循环更容易,而且您不需要创建数组。

function factorialize(num) {
    let res = 1;
    while (num > 0) res *= num--;
    return res;
};

console.log(factorialize(10));

如果你坚持使用数组,使用 es6 展开运算符的版本可能是

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

console.log(factorialize(10));