递归函数

时间:2017-10-23 22:16:12

标签: javascript recursion

我有一个递归函数,它通过Javascript中的数组进行冒泡。该函数调用自身,导致它超出浏览器的堆栈大小并返回错误:

RangeError: Maximum call stack size exceeded

我理解这个问题,并且我试图用setTimeout包裹调用自己的行。这有效,但是,即使我将时间设置为1毫秒,排序也明显慢于setTimeout不存在的时间。

这里的功能是:

var pieces = [........]; // jumbled array

bubbleSort(0);

function bubbleSort(a) {
    if (a < bars-1) {
        onBar = a;
    } else {
        onBar = 0;
    }

    if (pieces[onBar] < pieces[onBar + 1]) {
        // Correct order

        bubbleSort(onBar + 1);

    } else {
        // Incorrect order
        var p1 = pieces[onBar];
        var p2 = pieces[onBar + 1];
        pieces[onBar] = p2;
        pieces[onBar + 1] = p1;

        bubbleSort(onBar + 1);
    }
}

由于一些奇怪的原因,如果我将setTimeout中的一个调用行换行并保持另一个不变,则该函数运行时没有任何错误,但只要我将两个调用都解开,它就会返回错误。

感谢您的时间。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您需要一个分支,无需拨打bubbleSort即可返回。