Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Профессиональное программирование


Информационный Канал Subscribe.Ru

В начало Клуб программистов Весельчак У Связаться со мной
a

Доброго времени суток.

 

Наш сайт поздравляет всех администраторов с прошедшим праздником - "День Сисадмина". Удачи вам и стабильного коннекта!

 

Статьи:

Заметки о рекурсии - 2. Взгляд на рекурсию изнутри.

Автор: Alf

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

 Конечно же, рекурсию вполне можно использовать как «черный ящик», не заглядывая внутрь, и некоторые именно так и делают (хотя многие не делают даже так). Однако понимание некоторых тонкостей позволит вам избежать некоторых неприятных сюрпризов, которые рекурсия может преподнести и на которых базируется предубеждение против ее использования.

  Итак, открываем крышку черного ящика и смотрим внутрь, знакомясь с нехитрым механизмом внутри.

Благодарности

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

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

  Добрые слова Never после первой публикации явились доказательством того, что время на работу над статьей было потрачено не зря и тему следует продолжить. Если справедливость восторжествует и программирование наконец-то займет достойное место среди прочих искусств, то я уже знаю имя десятой музы, которая будет ему покровительствовать (.

  Нельзя также не высказать благодарности людям, которые приняли самое деятельное участие в обсуждении статьи.

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

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

  Надеюсь, что и эта статья вызовет интерес у читателей.

С чего мы начнем

Выбор учебной задачи

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

  • она предельно компактна и содержит минимум операторов, которые не будут заслонять своими деталями картины в целом;
  • она не содержит никаких обращений к каким-либо объектам вне самой подпрограммы (в отличие от «ханойских башен» и многих подобных программ);
  • при всем этом она решает вполне реальную, а не надуманную задачу, ее результат осмыслен, и его корректность может быть без труда проверена.


 

Выбор рабочей среды

  В качестве рабочей среды я предпочел использование Microsoft Visual C++ версии 6 в составе интегрированной среды Visual Studio 6. Полагаю, большинство читателей располагают этим средством и не встретят затруднений при попытке воспроизвести примеры на своем рабочем компьютере. Не думаю также, что предпочитающих платформу .NET или компиляторы от Borland (включая старый добрый 16-разрядный C++ 3.1 для реального режима) ждут какие-то серьезные трудности; вам придется только повнимательнее изучить руководство к своему отладчику.

Статья полностью: http://club.shelek.com/viewart.php?id=205

 

Книги

Благодарю приславших мне русскоязычные книги. Как только разберусь с ними, сразу приступлю к выкладыванию.

Сегодня три небольшие книжки.

1. XSLT (XML) - книга О Рейли - достаточно подробная. Размер - 1.7 Мег. У нас уже была книга по этой теме и на русском, но эта очень подробная.

2.USB in a Nutshell. - сделана неплохо, очень коротко и сжато. Расписан и железячный интерфейс. Размер - 150К

3. WinSock - краткое описание - тоже коротко и сжато. Описание структур, ошибок, ответов и функций. Размер - 130К

 

На сегодня это все.

Удачи вам и всего самого наилучшего.

Громозека.


http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное