我的JavaScript factorial函数每次都返回0

时间:2016-11-15 21:51:42

标签: javascript

我正在学习javascript。我写了一个无递归函数,我想返回给定数字的阶乘。

function factorialize(n) {
  for(var i = 0; i < n; i++) {
     n *= i;
  }
  return n;
}

factorialize(5);

所以结果应为120

我不断获得0

6 个答案:

答案 0 :(得分:3)

您正在从0循环到n ...将0中的任何数字乘以0将为0 另外一件事,你将它循环到n并在每个循环中用i递增,它进入无限循环

将其更改为以下

function factorialize(n) {
  var length=n;
  if(n==0) return 1;
  for(var i = 1; i < length; i++) {
     n *= i;
  }
  return n;
}

console.log(factorialize(5));

希望有所帮助

答案 1 :(得分:1)

您的代码中有两个(好的,三个)错误:

首先i必须从1开始(而不是0),然后升至f - 1,否则在第一次迭代时,它将设置为0 (其中f是你需要因子化的数字 - 注意我改变了函数的参数)

其次,您不能将n用于for循环的上限和计算结果。所以你需要另一个变量(这是我添加f的原因)。

function factorialize(f) {
  var n = f;
  for(var i = 1; i < f; i++) {
     n *= i;
  }
  return n;
}

但是在这里(在我上面的代码段中)还有一个第三个错误:因为0的阶乘应该是1,该函数将返回n({{跳过1}}循环。)

因为阶乘通常表示为for,我会用这种方式重写以上所有内容:

1 * 2 * 3 * ... * f

这最后一个函数也会为function factorialize(f) { var res, i; res = 1; for( i = 1; i <= f, i++ ) { res *= i; } return res; } 提供正确的结果。

最后,唯一的余数是检查否定factorialize(0)

答案 2 :(得分:1)

你应该从1开始到n。

function factorialize(n) {
  var ret = 1;
  for(var i = 1; i <= n; i++) {
     ret *= i;
  }
  return ret;
}

在原始代码中,i0开始。结果始终为00 * (any number)将导致0

答案 3 :(得分:1)

使用您的代码:

  • loop1:n = 5 * 0 | n = 0
  • loop2:n = 0 * 1 | n = 0
  • loop3:n = 0 * 2 | n = 0
  • loop4:n = 0 * 3 | n = 0
  • loop5:n = 0 * 4 | n = 0

然后你返回0

i ”必须从1开始,否则,在每个循环中乘以0。

我没有提供解决方案,因为您已经收到了很多正确答案。

答案 4 :(得分:0)

请试试这个:

function factorialize(n) {
  var p=1;
  for(var i = 1; i <=n; i++) {
     p*=i;
  }
  return p;
}

答案 5 :(得分:0)

你实际上是在做这个

n =(5 * 0 * 1 * 2 * 3 * 4 * 5 * 6)