Есть много плюсов и минусов в использовании рекурсии. Определенно, простота кода - самая большая, которая также обеспечивает лучшую поддержку кода и меньше ошибок.
Самая большая опасность для рекурсии - это крайние случаи, когда алгоритм выходит из-под контроля, нарушая предел стека функций. Некоторые языки, язык ABL Progress для одного, имеют параметр для максимально допустимого уровня вложенных вызовов. Обычно они низкие, и добавление рекурсии к миксу может привести к разрыву приложения в этом пределе.
Короче говоря, рекурсия всегда должна быть реализована с жесткими случаями завершения, в противном случае ее может быть очень сложно отладить (из-за непредсказуемости) и может вызвать серьезные проблемы в рабочем коде.
Что касается проблем с памятью и скоростью, если этот метод сам по себе не является кратким (с точки зрения времени), который вызывается много раз, на самом деле не имеет значения, какова производительность.
Пример. Если вы используете рекурсию для сканирования всех файлов и папок жесткого диска, влияние рекурсии на производительность будет незначительным по сравнению со временем, которое требуется, чтобы поразить жесткий диск и получить информацию о файловой системе. В этом случае рекурсия, вероятно, предпочтительнее итеративной обработки.
Другой пример: если вы сканируете узлы древовидной структуры, итерационный процесс может оказаться более полезным, поскольку мы не задействуем столько стека функций, что означает, что мы используем меньше памяти и, возможно, позволяем оборудованию использовать больше кэширования. См. Ответ Роберта Гулда для более подробной информации.