2013-06-26 65 views
0

我有以下的遞歸函數,檢查output數組的長度是否爲100.如果它的長度小於100,則遞歸調用該函數並使用參數變量n被增加1,如下所示:JavaScript遞歸函數沒有返回正確的輸出

var eratosthenes = function(n) { 
    // Eratosthenes algorithm to find all primes under n 
    var array = new Array(), upperLimit = Math.sqrt(n), output = new Array(); 

    // Make an array from 2 to (n - 1) 
    for (var i = 0; i < n; i++) { 
     array.push(true); 
    } 

    // Remove multiples of primes starting from 2, 3, 5,... 
    for (var i = 2; i <= upperLimit; i++) { 
     if (array[i]) { 
      for (var j = i * i; j < n; j += i) { 
       array[j] = false; 
      } 
     } 
    } 

    // All array[i] set to true are primes 
    for (var i = 2; i < n; i++) { 
     if(array[i]) { 
      output.push(i); 
     } 
    } 
    if (output.length < 100){ 
     eratosthenes(n+1); 
    } else { 
     return output; 
    } 
}; 

一旦陣列,正確的長度,已計算出,我然後使用以下函數格式化output數組:

var fmt = function(arr){ 
    return arr.join(); 
} 

但是,當我調用eratosthenes函數,如下所示:eratosthenes(100)返回的數組在fmt函數中導致異常。但是,如果按照如下方式調用eratosthenes函數:eratosthenes(545)其中output數組的長度= 100,則可以將數組傳遞給fmt函數而不會出現問題。有什麼辦法來解決這個問題遞歸?

回答

5

您需要返回你的函數調用的結果:

return eratosthenes(n+1); 
+0

這就是它!謝謝。 – blackpanther