我在这里尝试使用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))
}
答案 0 :(得分:1)
递归永远不会停止。
当将使用长度为1的数组调用该函数时,此数组将被拆分为一个长度为0的数组(递归停止)和另一个长度为1的数组。该函数将再次递归地调用第二个数组数组。这将再次产生相同的情况。
这意味着,您必须正确处理数组长度为1的情况(如Raphael所述,对不起,我之前没有看到此内容)。您可以简单地返回长度为1的数组,因为不需要排序。