Я недавно видел в нескольких разных местах комментарии по теме: «Я узнал о рекурсии в школе, но никогда не использовал ее и не чувствовал необходимости в ней с тех пор». (Рекурсия, кажется, является популярным примером «изучения книг» среди определенной группы программистов.)
Что ж, это правда, что в императивных языках, таких как Java и Ruby [1], мы обычно используем итерацию и избегаем рекурсии, отчасти из-за риска переполнения стека, а отчасти потому, что это стиль, который программисты используют в большинстве этих языков. привыкли к.
Теперь я знаю, что, строго говоря, в таких языках нет «необходимого» использования рекурсии: всегда можно каким-то образом заменить рекурсию на итерацию, независимо от того, насколько сложными становятся вещи. Под «необходимым» здесь я говорю о следующем:
Можете ли вы вспомнить какие-либо конкретные примеры кода на таких языках, где рекурсия была намного лучше, чем итерация (из соображений ясности, эффективности или иным образом), что вы все равно использовали рекурсию, и преобразование в итерацию было бы большой потерей
В ответах несколько раз упоминалось о рекурсивно идущих деревьях: что было именно в вашем конкретном использовании, что сделало рекурсию лучше, чем использование итератора, определенного библиотекой, было ли оно доступно?
[1]: Да, я знаю, что это также объектно-ориентированные языки. Однако это не имеет прямого отношения к этому вопросу.