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

时间:2017-09-11 20:42:16

标签: javascript arrays function factorial

我尝试创建一个带参数的函数,并将每个数字小于参数的值放到零并将其推入数组(降序)。然后使用for循环将数组的每个索引乘以下一个索引,但是我的返回返回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);

5 个答案:

答案 0 :(得分:1)

在第一次迭代中,arrayOfFactorial的长度为1,并且我将等于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 :(得分:0)

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

答案 2 :(得分:0)

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

2 - 你不需要阵列。您可以使用factorial = factorial * i

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

4 - 你返回了一些东西,但你不打印它。

如果无法解决问题,请参阅Dij的答案。

答案 3 :(得分:0)

您的情况下的数组不用于计算。你试图做的可能就是:

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循环中直接乘以factorial来计算它。像这样:

function factorialize(num) {
   var factorial = 1

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

   return factorial;
}

答案 4 :(得分:0)

我认为使用while循环可以更轻松,而且您不需要创建数组。

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

console.log(factorialize(10));

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

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

console.log(factorialize(10));