Рекурсия или итерация?

Есть ли снижение производительности, если мы используем цикл вместо рекурсии или наоборот в алгоритмах, где оба могут служить одной и той же цели? Например: проверьте, является ли данная строка палиндромом. Я видел много программистов, использующих рекурсию как способ показать себя, когда простой итерационный алгоритм может соответствовать всем требованиям. Играет ли компилятор жизненно важную роль при принятии решения, что использовать?

31 ответ

Переполнение стека произойдет, только если вы программируете на языке, который не имеет встроенного управления памятью... В противном случае, убедитесь, что у вас есть что-то в вашей функции (или вызов функции, STDLbs и т. Д.). Без рекурсии было бы просто невозможно иметь такие вещи, как... Google или SQL, или любое другое место, где нужно эффективно сортировать большие структуры данных (классы) или базы данных.

Рекурсия - это то, что нужно, если вы хотите перебирать файлы, почти наверняка вот так: 'find * |?grep *'работает. Вроде бы двойная рекурсия, особенно с конвейером (но не делайте кучу системных вызовов, как многие любят делать, если это то, что вы собираетесь выпустить для использования другими).

Языки более высокого уровня и даже clang/cpp могут реализовать то же самое в фоновом режиме.

Другие вопросы по тегам