Рекурсия Vs Loops

Я пытаюсь работать с примерами на деревьях, как указано здесь: http://cslibrary.stanford.edu/110/BinaryTrees.html Эти примеры решают проблемы с помощью рекурсии, интересно, можем ли мы предоставить итеративное решение для каждого из них, то есть всегда можем быть уверены, что проблема, которая может быть решена путем рекурсии, также будет иметь итеративное решение. Если нет, то какой пример мы можем дать, чтобы показать проблему, которая может быть решена только путем рекурсии/итерации?

-

Ответы

Ответ 1

Единственная разница между итерацией и рекурсией на компьютере заключается в том, используете ли вы встроенный стек или пользовательский стек. Таким образом, они эквивалентны.

Ответ 2

По моему опыту, наиболее рекурсивное решение действительно может быть решено итеративно.

Это также хорошая техника, поскольку рекурсивные решения могут иметь слишком большие накладные расходы в памяти и процессора.

Ответ 3

Поскольку рекурсия использует неявный стек, на котором хранится информация о каждом вызове, вы всегда можете реализовать этот стек и избегать рекурсивных вызовов. Поэтому да, каждое рекурсивное решение можно преобразовать в итеративный.

Прочитайте этот вопрос для доказательства.

Ответ 4

Рекурсия и итерация - это два инструмента, которые на очень фундаментальном уровне выполняют одно и то же: выполните повторную операцию над определенным набором значений. Они взаимозаменяемы тем, что нет проблем, которые никоим образом не могут быть решены только одним из них. Это не означает, однако, что нельзя быть более подходящим, чем другое.

Ответ 5

Рекурсия имеет то преимущество, что она будет продолжаться без известного конца. Прекрасным примером этого является настроенная и заправленная Quick Sort.

Вы не можете создавать дополнительные циклы, но вы можете создавать новые потоки через рекурсию.

Ответ 6

Как "старый парень", я возвращаюсь к своей памяти о том, что рекурсивные партизаны спуска легче писать, но эти итеративные парсеры на основе стека работают лучше. Здесь статья, которая, похоже, поддерживает эту идею с метрикой:

http://www.texttoolkit.com/index.php?option=com_content&view=article&catid=35%3Atechnology&id=60%3Abeyond-recursive-descent&Itemid=55

Следует отметить, что автор упоминает об исключении стека вызовов с помощью рекурсивного спуска. Итеративная реализация на основе стека может значительно повысить эффективность ресурсов.