У меня есть следующая рекурсивная функция, которая проверяет, имеет ли массив 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
без проблем. Есть ли способ решить эту проблему с рекурсией?
Вот так! Спасибо. – blackpanther