【问题标题】:Factorializing a number by creating an array and multiplying it通过创建一个数组并将其相乘来分解一个数字
【发布时间】:2017-07-09 20:37:04
【问题描述】:

我正在经历一项 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);

【问题讨论】:

  • 您将0 作为第一个元素。所以很自然地,产品也会是0
  • 另外你应该将product初始化为1
  • 关键是函数返回NaN,甚至不是0:)
  • 查看亚当的answer 以获得简单的解决方案。

标签: javascript arrays


【解决方案1】:

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

如果 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));

【讨论】:

    【解决方案2】:

    1) 您需要初始值“产品”变量 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】:

      您好像漏掉了一个右括号

      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);
      

      但正如 cmets 中所述,您应该将 i = 0 更改为 i = 1 不仅因为它会改变最终结果(它对所有 num 都会这样做),而且因为它也不遵循阶乘算法。

      【讨论】:

      • 对此感到抱歉,但在哪里?
      • return product;product 之后的额外右括号应使用 1 初始化。
      • 非常感谢。它现在起作用了。我有 3 个错误: 1. 第一个 for 循环的右括号在返回产品之后,而不是在 array.push(i) 之后。 2. 我将 0 作为第一个元素,因此产品始终为 0。将 i=0 更改为 i=1 - 解决了问题。 3.我没有将product初始化为1。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 2017-09-13
        • 2022-01-15
        • 2013-11-08
        相关资源
        最近更新 更多