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
函數而不會出現問題。有什麼辦法來解決這個問題遞歸?
這就是它!謝謝。 – blackpanther