@pinkhead_psd

Зачем нужна рекурсия в реальных случаях?

Недавно изучил (!= понял) тему с рекурсией. Понял, что можно очень мудрено возвести число в нужную степень или посчитать кол-во символов в числе, для такой задачи как по мне достаточно обычного цикла, поправьте если нет и почему. Так вот, вопрос заключается в том, что в каких реальных проектах или задачах может потребоваться этот демон, я бы сказал даже в чем его реальная суть, потому что я видимо не до конца её понял. Пока что мой мозг видит рекурсию как обычный цикл, только задом наперед.
  • Вопрос задан
  • 563 просмотра
Пригласить эксперта
Ответы на вопрос 7
mayton2019
@mayton2019
Bigdata Engineer
Рекурсия нужна при обработке иерархических данных. Например - обойти файлы и каталоги
в файловой системе и выполнить какое-то действие. Или действие с условием. Например если
в текущем фолдере есть фолдер .git - то выполнить какой-то git script.

Рекурсия может понадобиться при работе с документами XML/JSon (шаблон composer). И хотя
в некоторых API рекурсия может быть частично скрыта за языками XPath/JSonPath тем не меннее
ее рекурсивная природа остается налицо. Кроме того если вам достался узкий API типа DomDocument
без поисковых диалектов - то обойти его можно на любом ЯП с рекурсивной функцией.

Рекурсия нужна при парсинге сайтов. Это вобщем просто более расширенная трактовка работы с файловой
системой. Если Url-s это как-бы файлы в web пространстве и они имеют ссылки друг на друга - то вы
можете рекурсией это все обходить.

Рекурсия почти всегда нужна при работе с графами. Берите любой алгорим на теорию графов и я готов
спорить что 99% он будет содержать рекурсию.

Все настольные игры (шахматы-шашки) в основе своего алгоритма альфа-бета поиска с отсечениями и
BWF базируются на рекурсии.
Ответ написан
Griboks
@Griboks
Вы правы, рекурсию всегда можно заменить циклом. Более того, рекурсия - это и есть цикл, который за вас выполняет движок языка. Главный вопрос - что для вас будет удобнее: рекурсия или цикл.

Зачем нужна рекурсия в реальных случаях?

Чтобы уменьшить количество переменных, указателей, строк, сложность кода, сложность алгоритма, время разработки, сложность отладки.
Ответ написан
Комментировать
vfreelancer
@vfreelancer
php
пример: меню на сайте 5 уровней вложенности. отрисовывваем первый уровень, если пункт содержит подпункты - для него вызываем этот же код и так далее
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Реальный проект парсинг любого магазина по вложенным категориям.
Вы допустим предположите что разумная глубина 6 уровней, а этот маньяк что уровней должно быть 14
Ответ написан
Комментировать
@mletov
Наверное, файлы и папки, упомянутые выше - это наиболее универсальный пример, без привязки к предметной области, языку программирования или типу приложения (веб, мобайл, десктоп).

Попробуйте вывести полный путь до конкретного файла с учетом всех папок.
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Если простыми словами, то рекурсия - это просто вызов функции внутри неё самой. Используется, например, для прохода по группе связанных структур с несколькими связями, например деревьев или графов. Очень удобно работать со структурами любой глубины вложенности.

Пока что мой мозг видит рекурсию как обычный цикл, только задом наперед.

Неправильно видит. "Зад" и "перед" не имеют к этому отношения. Цикл - это строгий вызов подпрограммы/куска кода со счетчиком и условием либо просто с условием и без необходимости объявлять отдельную функцию. Цикл работает пока соблюдается условие и изнутри цикла код влияет только на условие, в большинстве ЯП есть выход из цикла. В рекурсии же нету ни условий ни счетчиков - это все остается на выбор программиста. Это более низкий уровень в сравнении с циклом. Если цикл это строгое решение под определенные задачи, то рекурсия - это более гибкое и универсальное решение. И то и то нужно и используется в различных ситуациях.
Ответ написан
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Вот типичная задачка.

В каталоге с файлами и другими подкаталогами нужно исправить права доступа на файлы и не трогать подкаталоги. В подкаталогах могут быть еще подкаталоги и файлы (глубина ограничена только возможностями ФС). Нужно обойти все уровни вложенности и исправить права на все файлы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы