RangeError:array.slice超出了最大调用堆栈大小

时间:2018-11-03 17:23:53

标签: javascript mergesort

我在这里尝试使用javascript实现合并排序,但是出现错误maximum call stack size exceeded at array.slice

function mergeSort(arr) {
    if(arr.length < 1) return arr;
    let len = arr.length
    let middle = Math.floor(len/2)
    let left = arr.slice(0, middle)
    let right = arr.slice(middle)
    return merge(mergeSort(left), mergeSort(right))
}

1 个答案:

答案 0 :(得分:1)

递归永远不会停止。

当将使用长度为1的数组调用该函数时,此数组将被拆分为一个长度为0的数组(递归停止)和另一个长度为1的数组。该函数将再次递归地调用第二个数组数组。这将再次产生相同的情况。

这意味着,您必须正确处理数组长度为1的情况(如Raphael所述,对不起,我之前没有看到此内容)。您可以简单地返回长度为1的数组,因为不需要排序。