我有以下递归函数,用于检查output
数组的长度是否为 100。如果它的长度小于 100,则递归调用该函数,并将参数变量 n 递增 1,如下所示:
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
毫无问题地将数组传递给函数。有没有办法用递归解决这个问题?