JavaScript的阶乘函数每次都返回0

My JavaScript factorial function returns 0 every time

本文关键字:返回 阶乘 函数 JavaScript      更新时间:2023-09-26

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

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

所以结果应该是120

我一直得到0

您正在从0循环到n…任何数乘以0都是0另一件事,你循环到n然后在每一次循环中加1,它就进入了无限循环

将其更改为以下

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

希望有所帮助

与您的代码:

  • 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。

我不提供解决方案,因为你已经收到了很多正确的答案

你应该从1开始到n。

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

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

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

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

第二,不能对for循环的上界和计算结果同时使用n。所以你需要另一个变量(这就是我添加f的原因)。

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

然而这里(在我上面的代码片段中也是如此)有一个第三个错误:因为0的阶乘应该是1,函数将返回n(跳过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)结果。

最后检查f是否为阴性

你真的这么做了

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

请试试:

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