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



这里我试图用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的情况(正如Raphael所说,很抱歉我以前没有看到这一点(。你可以简单地返回一个长度为1的数组,因为不需要排序

最新更新