@Yonghwa
121

В чем принципиальная разница между вложенными циклами и рекурсией?

What's up, программач.
Рекурсия пришла после циклов, или циклы на замену рекурсии?
В некоторых функциональных языках циклы отсутствуют как таковые вообще, а повторение реализуется рекурсией.
Так вот, в чем разница и что в каких случаях предпочтительнее?
Слышал, что на собеседовании такие вопросы иногда проскальзывают.
  • Вопрос задан
  • 1667 просмотров
Пригласить эксперта
Ответы на вопрос 4
@dmitryKovalskiy
программист средней руки
Для сферической задачи в вакууме и идеальной платформы - разницы никакой. Все задачи, которые можно решить иттеративно(циклом) можно реализовать рекурсивно. На практике все немного иначе. Как правило все уткнется в то как реализуюется рекурсия на конкретной платформе. К примеру если на каждом вызове в стек кладется указатель на функцию, которую надо вызывать рекурсивно - то есть риск что стек переполнится и вызовет исключение ДО того как рекурсия начнет раскручиваться. Для программиста важнее знать когда алгоритм рекурсивно выглядит красивее и прозрачнее чем итеративно. К примеру вычисление факториала по определению рекурсивно. Решать итеративно можно, но алгоритм не будет впрямую ложится на определение факториала.
Ответ написан
Комментировать
A1ejandro
@A1ejandro
youtube блогер, ИТ-специалист
Сначала изобрели циклы. Затем рекурсию.

Я бы сказал так. Принципиальная разница в том, что цикл это всегда повторное многократное выполнение одного и того же кода.
В рекурсии можно реализовать гораздо более сложный алгоритм, можно сказать, что рекурсия, это более "умный" цикл, реализующий "углубление внутрь себя", различные его уровни углубления. Повтор - да, но этот код, уже не тот же самый, как в цикле, это уже код находящийся на другом уровне.
На практике рекурсия позволяет гораздо более точно описать некоторые процессы, либо механику обработки этого реального процесса. А в связке с ООП, это еще и очень большое облегчение разработки ПО, и сокращение объемов написанного кода.
Ответ написан
Комментировать
stasuss
@stasuss
быдлокодер со стажем
рекурсия - вызов функции из самой этой функции, со всеми вытекающими в виде забивания стека

вообще в разных случаях может быть предпочтительна либо рекурсия, либо цикл. циклы обычно предпочтительнее если заранее известно что количество повторений очень большое
Ответ написан
Комментировать
sivabur
@sivabur
Заблокировали просто так!
Память при рекурсии она постоянно увеличивается!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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