Как работает рекурсивный вызов в функции? - PullRequest
0 голосов
/ 29 сентября 2018

Цель этого алгоритма - вернуть массив, который разделен на более мелкие двумерные массивы внутри него.Длина каждого внутреннего массива определяется как size.Как здесь работает рекурсивный вызов с методом .slice()?Как заставить функцию возвращать массив, разбитый на меньшие подмассивы?Я не могу понять это решение.

function chunkyArrayInGroups(arr, size){
    if(arr.length <= size){
        return [arr];
    } else {
        return [arr.slice(0, size)].concat(chunkyArrayInGroups(arr.slice(size), size));
    }
}

1 Ответ

0 голосов
/ 29 сентября 2018

При поднятии стека вызовов куски отрезаются от фронта массивов (.slice(size)):

 [0, 1, 2, 3, 4, 5] -> [2, 3, 4, 5] -> [4, 5] -> []

Теперь при каждом рекурсивном вызове существует промежуточное значение, удерживающее вырезанную часть (* 1005)*):

                   [0, 1]             [2, 3]       [4, 5]

Теперь разделенные части соединяются вместе, когда стек раскручивается:

                   [0, 1]           [2, 3]        [[4, 5]]
                   [0, 1]          [[2, 3], [4, 5]]
                  [[0, 1], [2, 3], [4, 5]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...