通过创建数组并将其相乘来对数字进行因式分解

时间:2017-02-20 14:05:55

标签: javascript arrays

我正在经历一次FreeCodeCamp挑战。

  

"返回提供的整数的阶乘。

     

如果整数用字母n表示,则表示阶乘   所有正整数小于或等于n的乘积。

     

因子通常用简写符号n表示!

     

例如:5! = 1 * 2 * 3 * 4 * 5 = 120"

我已经知道最简单的方法是使用递归但是在我发现这个事实的那一刻我已经尝试通过创建一个数组来解决问题,在其中推送数字并将它们相乘。但是我坚持这一步。我根据函数factorialize参数创建了一个具有位数的数组,但我无法获得这些数字的乘积。我做错了什么:

function factorialize(num) {
  var array = [];
var product;
  for(i = 0; i<=num;i++) {
 array.push(i); 
for (j=0; j < array.length; j++) {
  product *= array[j];
}
return product;
 }
}
factorialize(5);

4 个答案:

答案 0 :(得分:2)

我认为最简单的方法是创建一个范围并减少它:

&#13;
&#13;
var n = 5;

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

console.log(factorize(n));
&#13;
&#13;
&#13;

答案 1 :(得分:2)

看起来你错过了一个近似的括号

function factorialize(num) {
  var array = [];
  var product = 1;
  for(i = 0; i<=num;i++) {
    array.push(i); 
  }                     //right here!!!    <----
  for (j=0; j < array.length; j++) {
    product *= array[j];
  }
  return product;
}

factorialize(5);

但正如评论中所述,您应该将i = 0更改为i = 1,这不仅仅是因为它会更改最终结果(它会对所有数字进行更改),而且因为它也不会跟随阶乘算法。

答案 2 :(得分:1)

1)您需要初始值&#39;产品&#39;变量 2)你应该将i = 0改为1.你在循环中乘以0 3)您不需要嵌套循环

function factorialize(num) {
  var array = [];
  var product = 1;
  for(var i = 1; i <= num; i++) {
    array.push(i); 
  }
  for (j=0; j < array.length; j++) {
    product *= array[j];
  }
  return product;
}

答案 3 :(得分:0)

你只需要一个循环, 从1到最大数字,然后你将它们相乘, 从代码中稍微清理一下 事实变量将包含构成总和的单个数字的字符串版本

如果m为5,那么你的事实将是1 * 2 * 3 * 4 * 5

function factorialize(num) {
  var product = 1;
  var fact = ""
  for (i = 1; i <= num; i++) {
    product *= i;
    fact += i + "*"
  }
  fact = fact.substring(0, fact.length - 1)
  console.log(fact) 
  return product;
}
console.log(factorialize(5));