2013-06-26 5 views
0

У меня есть следующая рекурсивная функция, которая проверяет, имеет ли массив output длину 100. Если длина меньше 100, функция рекурсивно вызывается и переменная аргумента п увеличивается на 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