Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Решение задач с рекурсией.

Читайте также:
  1. C.) К специфическим задачам, которые используются в ходе реализации частично-поисковых методов на уроке технологии, относятся
  2. E) прокурором утвержден протокол об уголовном проступке и принято решение о направлении уголовного дела в суд
  3. ERP имеет выходы во внешнюю среду и предназначена для решения задач комплексного управления предприятием.
  4. I. ЦЕЛИ И ЗАДАЧИ КУРСОВОЙ РАБОТЫ
  5. I. Цели и задачи освоения дисциплины
  6. I. Цель и задачи преддипломной практики.
  7. I.1.1. Цели и задачи дисциплины
  8. II. Задачи и направления деятельности методического объединения
  9. II. Основные цели и задачи концепции
  10. II. Цели и задачи выпускной квалификационной работы

Программирование с рекурсией.

 

Рекурсия – подход к решению задач, когда задача сводится к аналогичной, но более простой. Полное решение задачи принимает форму рекурсивной процедуры, которая выполняет необходимые упрощения задачи, далее вызывает себя для решения более простой задачи.

 

 

Рекурсивные процедуры в CF Pascal.

 

Процедуры в CF Pascal могут включать процедурные операторы, которые вызывают их самих. Для некоторых задач рекурсия – естественный и очевидный подход, более предпочтительный, чем итеративные решения.

 

Новые идеи: рекурсия и ее реализация в CF Pascal.

 

Решение задач с рекурсией.

Метод семейства задач, рассмотренный в главе 4 подводит нас к рекурсивным решениям. Как показано в семействах программ IFSort и MinSort, в этом подходе для сортировки более длинных строк использовались ранее разработанные подходы для сортировки более коротких строк. Например, в семействе MinSort, MinSort4, которая сортирует 4-строки может быть описана в терминах MinSort3, MinSort5 – в теминах MinSort4 и т.д. Решение для сортировки m-строк – использовать сортировку (m-1)-строк.

Именно эта концепция используется в SelectSort, для m-строки, которую требуется отсортировать, находится минимальный символ и удаляется из строки. Остается (m-1)-строка, которую также обрабатывает SelectSort, получая для дальнейшей сортировки (m-2)-строку, …, 2-строку, 1-строку. Финальная задача, сортировка 1-строки, имеет тривиальное решение.

Стратегия решения задачи ищет способ циклически приводить задачу к более простой той же формы, пока не будет достигнута последняя задача, которая может быть решена напрямую. Предположим, что может быть написана процедура решения для каждого члена в таком семействе задач с данными для решения в параметре процедуры. Далее, процедура должна быть способна вызывать себя с параметром, содержащим данные меньшего члена семейства. Например, придумаем процедуру для сортировки строки из файла F1 в OUTPUT.

 

PROCEDURE RSort (VAR F1: TEXT);

VAR

Min: CHAR;

F2: TEXT;

BEGIN {RSort}

RESET(F1);

IF NOT(EOLN(F1))

THEN

BEGIN

REWRITE(F2);

{Положить минимальный из F1 в Min

и копировать другие символы в F2}

WRITE(Min);

{Копировать F2 обратно в F1}

{***}

END

END; {RSort}

В строке отмеченной {***} F1 содержит строку на один символ меньше, чем при вызове процедуры, первый символ отсортированной последовательности уже записан. Задача была сведена к сортировке более короткой строки в точно таком же формате, для которого была разработана RSort. Таким образом, {***} может быть замещен на процедурное выражение

RSort(F1)

В случае пустого файла, нам нечего писать в OUTPUT, RSort именно это и делает, проверяя на EOLN.

 

Предположим, что RSort вызывается в процедурном идентификаторе.

 

PROGRAM DoRSort (INPUT, OUTPUT);

VAR

Raw: TEXT;

{Включить PROCEDURE RSort (VAR F1: TEXT);}

BEGIN {DoRSort}

REWRITE(Raw);

{Копировать строку из INPUT в Raw}

WRITELN(‘Сортированая строка:’);

RSort(Raw);

WRITELN;

END. {DoRSort}

 

Может показаться, что здесь есть что-то магическое. RSort обрабатывает только один символ, не выполняя сортировки. Но она будет перезапускаться снова и снова, каждый раз обрабатывая один символ, снова до тех пор пока файл передаваемый как параметр не станет пустым. Каждый символ будет выведен в OUTPUT в сортированном порядке.

 




Дата добавления: 2015-04-12; просмотров: 89 | Поможем написать вашу работу | Нарушение авторских прав

<== 1 ==> | 2 | 3 | 4 | 5 | 6 | 7 |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав