2014-12-05 54 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] 

從去年就乘一個接一個首先。