RangeError: Превышен максимальный размер стека вызовов с помощью array.slice - PullRequest
0 голосов
/ 03 ноября 2018

Здесь я пытаюсь реализовать сортировку слиянием с помощью 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 голосов
/ 03 ноября 2018

Рекурсия никогда не останавливается.

Когда функция будет вызываться с массивом длины 1, этот массив будет разделен на один массив длиной 0 (там рекурсия останавливается) и другой массив длиной 1. Функция будет вызываться снова рекурсивно со вторым массив. Это создаст ту же ситуацию снова.

Это означает, что вы должны обработать ситуацию, когда массив имеет длину 1 правильно (как уже было сказано Рафаэлем, извините, я не видел этого раньше). Вы можете просто вернуть массив длины 1, потому что нет необходимости сортировать.

...