Рекурсия
Рекурсия — это процесс, в котором функция вызывает сама себя, прямо или косвенно
Важно
Каждая рекурсивная функция должна иметь условие прерывания рекурсии В противном случае вызов функции приведет к бесконечному циклу.
Хвостовая рекурсия — это когда последним исполняемым оператором рекурсивной функции будет оператор return с вызовом этой же функции
Простейший (классический) пример рекурсии — вычисление факториала
1function factorial ( num, result ) {2 result = ( !result ? 1 : res ) * num--3 return num < 2 ? result : factorial ( num, result )4}
1function factorial ( n, result = 1 ) {2 result *= n--3 return n < 2 ? result : factorial ( n, result )4}
1function factorial ( n, result ) {2 while ( n > 1 )3 return factorial ( n-1, n * ( !result ? 1 : result ) )4 return result5}
1function factorial ( n, result ) {2 return n < 2 ? !result ? 1 : result :3 factorial ( n-1, n * ( !result ? 1 : result ) )4}
В JavaScript каждый вызов функции добавит кадр вызова в стек. Когда вызов завершается, кадр удаляется из стека. Однако рекурсивная функция не завершается сразу. Она вернет рекурсивный вызов самой себя
Если хвостовая рекурсия достаточно глубокая, это может привести к переполнению стека и генерации исключения RangeError
Исключение RangeError
возникает тогда, когда глубина рекурсии превышает 10000
Практика 👩💻👩💻
Используя следующую структуру, отрисовать ее в DOM
используя createElement
и реализовать поиск
1const directories = [2 {3 dir: {4 name: "root",5 },6 },7 {8 dir: { name: "child" },9 },10 {11 dir: [12 {13 dir: { name: "John" },14 },15 {16 dir: { name: "hello" },17 },18 {19 dir: [20 {21 dir: { name: "nested" },22 },23 {24 dir: [25 {26 dir: { name: "nested" },27 },28 {29 dir: { name: "one" },30 },31 ],32 },33 ],34 },35 ],36 },37];
- Отрисовать структуру в
DOM
- Создать input для поиска (использовать event change что бы получить значение из input)
- Подсветить все найденные элементы
- Если результаты не найдены вывести "Результатов нет"
Дополнительно
- Сделать accordion (по клику на родителя скрывать/показывать дочерние элементы)