阵列析因。获得NaN输出。使用Javascript

时间:2014-12-05 05:50:21

标签: javascript arrays nested-loops nan factorial

var array = [5,4,3,2,1];

document.write("<br>Facorial: " + factorial(array));

//factorial function Ex. 5! = 5*4*3*2*1 = 120

function factorial(params){
        var f = 1;
        for (i = 0; i <= params.length; ++i){
            for (j = 1; j <= params[i]; j++){
                f = f * params[j];
            }
        }
        return f;
    }

我正在尝试创建一个程序,用户在数组中输入一堆随机数,程序会计算这些数字的不同内容。

我正在尝试将我的数组中的每个单独的数字设置为因子,然后以相同的形式呈现。

我现在如何拥有它为我的输出获得NaN。

我做错了什么?或者我可能做得不够?

CURRENT OUTPUT

Factorial: NaN

我想要什么

Factorial: 120,24,6,2,1

4 个答案:

答案 0 :(得分:1)

您可以使用来自Felix Kling回答herefact函数并使用Array.map然后Array.join

function fact(x) {
   if(x == 0) return 1;
   return x * fact(x-1);
}
function factorial(arr){
   var result = arr.map(fact);
   return result.join(",");
}

答案 1 :(得分:1)

代码中的错误(或至少:奇怪的):

  • f是一个数字。你好像希望你的函数返回一个数组?
  • i <= params.length应为i < params.length。数组索引从0开始,以length-1结束。
  • 您将累加器变量乘以params[j] - 其中j是任何小于当前查找数组项的数字。这就是为什么你得到NaN的原因 - 当i == 0时,它会循环到j == 5,而params[5]undefined - 从而产生NaN结果

你想要的似乎是

function factorial(n) {
    // function that computes the number n!
    var acc = 1;
    while (n > 0) acc *= n--;
    return acc;
}
function facArray(params) {
    var f = [];
    for (var i=0; i<params.length; i++)
        f[i] = factorial(params[i]);
    return f;
}

答案 2 :(得分:0)

试试这段代码

var array = [5,4,3,2,1];

document.write("<br>Facorial: " + factorial(array).join(','));

function factorial(params){
        var op = [];
        for (i = params.length - 1; i >= 0 ; i--){
            var f = 1;
            for (j = 0; j < i; j++){
                f = f * params[j];
            }
             op.push(f);
        }
       return op;
    }

答案 3 :(得分:0)

这一切都在while:D

var array = [5,4,3,2,1];
var len = array.length-1;
while(len--) {
    array[len] *= array[len+1];
}

array;// [120, 24, 6, 2, 1]

从最后一个到第一个一个接一个地加倍。