2014-12-05 48 views
0
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输出。 Javascript

我试图让我的数组中的每个单独的数字被分解,然后以相同的形式呈现。

我现在是怎么得到的,我得到的是我的输出NaN。

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

电流输出

Factorial: NaN 

我想

Factorial: 120,24,6,2,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; 
} 
1

你可以利用从费利克斯·克林的回答here采取这一fact功能和使用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(","); 
} 
0

尝试在while这个代码

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; 
    } 
0

这就是: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] 

从去年就乘一个接一个首先。