LINUX.ORG.RU

История изменений

Исправление rtvd, (текущая версия) :

И рекурсия и итерация это просто способы описать алгоритм.

Они почти эквивалентны. Циклы эквивалентны хвостовой рекурсии. Циклы с разного рода стеками эквивалентны нехвостовой.

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

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

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

Исходная версия rtvd, :

И рекурсия и итерация это просто способы описать алгоритм.

Они почти эквивалентны. Циклы эквивалентны хвостовой рекурсии. Циклы с разного рода стеками эквивалентны нехвостовой.

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

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

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