Galkov писал(а):
процедура с контекстом - это есть ни что иное, как метод объекта.
Вы знаете, очень не хотелось бы приплетать сюда теоретические построения по поводу объектов... То есть, конечно, и процедуру можно рассматривать как объект (самостоятельную сущность), но наш анализ это вряд ли упростит и вряд ли будет сильно полезно... имхо...
А вот дать определение рекурсии - алгоритмичский приём, который реализует итерацию и представляет её в терминах вызова реентерабельных процедур. Вот где-то так... Важно, что итерационный алгоритм можно во многих случаях одинаково успешно спроецировать как на цикл, так и на рекурсивный вызов процедуры. Причём, несмотря на возможные различия в "машинной" реализации, обе структуры оказываются гомеоморфны (то есть топологически эквивалентны, с возможностью автоматического преобразования друг в друга).
Поэтому то или иное представление - исключительно дело предпочтения проектировщика (если абстрагироваться от машинной реализации). Если же не абстрагироваться, то рекурсия может оказаться более выгодной в стековых машинах (Форт).
2 Илья Ермаков: А кто-нибудь вообще думал на тему гомеоморфности управляющих структур алгоритмов?Galkov писал(а):
рекурсия, это создание нового объекта, посылка ему некоторых сообщений (вызов методов), ну и восстановление статус-кво. В смысле: прием результатов и ликвидация этого объекта.
В принципе это так... Великая вещь - инкапсуляция! Мы даже не обязаны подозревать наличие контекста... как и объекта... Дёрнули за верёвочку - получили результат. Всё!
Galkov писал(а):
Ну вот, создание этого нового объекта (контекста, если хотите), с последующим возвратом к старому - и есть та самая загогулина, на которой и начинается рекурсивный заворот...
Ее и надо отвечать, выделять, фиксировать внимание....
Вот именно и не надо, поскольку есть инкапсуляция!
Надо выделять только в отдельном частном случае - когда верёвочка перепутана с другими (глобальный контекст).
Galkov писал(а):
P.S. А реентерабильность влияет на эффективность кода. И не слабо так влияет...
Никак не влияет.

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

НО! ПОКУДА СТРУКТУРЫ ГОМЕОМОРФНЫ, ЭТО НЕ НАШЕ ДЕЛО! (а дело оптимизирующего кодогенератора).