3

我制作了一个javascript,它将给出输入到数组中的所有数字的阶乘(减去数组“0”中的第一个数字,我必须把它放在那里以使代码正确运行)

fact = [0, 4, 2, 5, 3];
factorial = 1;
for (x = 1; x < fact.length; x++) {
for (i = 1; i <= fact[x]; i++) {
 factorial *= i;
 if (fact[x] === i) {
    console.log(fact[x] + "!" + " " + "=" + " " + factorial);
     factorial = 1;
   }
  }
 }``

一切正常在这里是console.log:

4!= 24

2!= 2

5!= 120

3!= 6

我的问题是如何将变量 x 和 i 的初始值更改为 0,这样我就可以删除数组中的空间持有者“0”,而不会将所有内容输出为 0,因为目前如果我将变量设置为 0 以启动并删除空间持有者我的数组中的“0”等式变为:

阶乘 *= 0;

这将使一切都等于零,我不希望那样!非常抱歉,我的问题措辞不佳,感谢您的帮助!

4

3 回答 3

3

jsFiddle Demo

您可以用这样的 while 循环替换内部 for 循环:

var fact = [4, 2, 5, 3];
for (x = 0; x < fact.length; x++) {
 var factorial = fact[x];
 var result = 1;
 while( factorial > 0 ){
  result *= factorial--;        
 }
 console.log(fact[x] + "!" + " " + "=" + " " + result);
}
于 2013-10-24T02:32:55.737 回答
1

另一种方法是把你的循环放在相反的位置:

for (i = n; i > 0; i--) {
    fact *= i;
}

这避免了0循环中的问题。你从数字开始,然后倒退,直到你击中1

您还可以通过将factorial生成器函数从循环中拆分到数组来简化一些事情:

function each (a, f) {
    var i = 0,
        r = [];

    for (i = 0; i < a.length; i++) {
        r.push(f(a[i]));
    }

    return r;
}

function factorial (n) {
    var i = 0,
        fact = 1;

    for (i = n; i > 0; i--) {
        fact *= i;
    }

    return fact;
}

var factorials = each([4, 2, 5, 3], factorial);

console.log(factorials.join(', '));

编辑:

在这里小提琴:http: //jsfiddle.net/ToddT/Jy5Lp/

于 2013-10-24T02:48:58.523 回答
0

我的问题是如何将变量 x 和 i 的初始值更改为 0,以便删除我的空间持有者“0”

为什么要改成i0?它根本与数组无关fact。你的担心是多余的。如果您删除占位符,您的代码应该可以正常工作0

fact = [4, 2, 5, 3];
factorial = 1;
for (x = 0; x < fact.length; x++) {
  for (i = 1; i <= fact[x]; i++) {
    factorial *= i;
    if (fact[x] === i) {
      console.log(fact[x] + "!" + " " + "=" + " " + factorial);
      factorial = 1;
    }
  }
}
于 2013-10-24T03:40:01.570 回答