JavaScript递归函数没有返回正确的输出

时间:2013-06-26 09:58:34

标签: javascript

我有以下递归函数,它检查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函数。有没有办法用递归来解决这个问题?

1 个答案:

答案 0 :(得分:5)

您需要返回函数调用的结果:

return eratosthenes(n+1);