Рекурсивная функция в вызове функции в Javascript - PullRequest
0 голосов
/ 26 мая 2020

Я сейчас изучаю алгоритмы, в частности сортировку слиянием. У меня возникла проблема, пытаясь понять, как этот поток кода работает в отношении вызова функции, которая принимает две рекурсивные функции в качестве входных данных. Код выглядит следующим образом:


const merge=(left,right)=>{
    //console.log(left,right)
    let sorted=[]
    let leftIndex=0
    let rightIndex=0
    while(leftIndex<left.length && rightIndex<right.length){
        if(left[leftIndex] < right[rightIndex]){
            sorted.push(left[leftIndex])
            leftIndex++
        }
        else{
            sorted.push(right[rightIndex])
            rightIndex++
        }

    }
    return sorted.concat(left.slice(leftIndex).concat(right.slice(rightIndex)))

}


const mergeSort=(arr1)=>{
    if(arr1.length <= 1){
        return arr1
    }
    let mid= Math.floor(arr1.length/2)
    let left=arr1.slice(0,mid)
    let right=arr1.slice(mid)



    return merge(mergeSort(left),mergeSort(right))


}

mergeSort(arr1)

Не уверен, что именно происходит с массивом в точке, где вызывается merge (mergeSort (слева), mergeSort (справа)), возвращает ли он 2 и 4 и передает его в функцию слияния, затем верните обратно с отсортированным массивом [2,4], затем сделайте то же самое с 9,10? Спасибо за любую помощь в объяснении этого потока кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...