我有一个递归函数,它通过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
中的一个调用行换行并保持另一个不变,则该函数运行时没有任何错误,但只要我将两个调用都解开,它就会返回错误。
感谢您的时间。任何帮助表示赞赏。
答案 0 :(得分:0)
您需要一个分支,无需拨打bubbleSort
即可返回。