Можно создать дубликат:
Is recursion ever faster than looping?Накладные расходы на рекурсию - насколько это серьезно?
Я был первым обучен программы серьезно C, около 15 лет назад. Мой работодатель хотел получить очень оптимизированный код для сложных вычислительных задач. Я помню, что мне не раз советовали переписывать рекурсии как циклы, даже при дорогостоящей читабельности, чтобы избежать «накладных расходов на рекурсию». Как я понял, тогда накладные расходы рекурсии были дополнительным усилием, необходимым для того, чтобы выталкивать данные в стек, а затем выталкивать их.
Теперь я код на C, Python, Perl, а иногда и на Java, и иногда мне интересно узнать о рекурсиях. Есть ли еще что-то, что можно получить, переписав их? Что, если это хвостовые рекурсии? Неужели современные компиляторы задали все эти проблемы? Являются ли такие проблемы неуместными для интерпретируемых языков?
Накладные расходы функций могут сильно различаться в разных системах, поэтому этот вопрос имеет смысл только в конкретном контексте. Тем не менее, я думаю, что общая тенденция последних двух десятилетий заключалась в сокращении накладных расходов. – dmckee