НАЗАД
Во всех примерах рекурсивных алгоритмов, которые будут далее приведены, имеется некоторая убывающая неотрицательная управляющая величина, обеспечивающая завершимость программы, когда данные принадлежат соответствующим областям.
Поиск рекурсивных алгоритмов увлекателен: он имеет собственную технику, развитую, в частности, сторонниками языка ЛИСП, который дал с 1959 г. методику рекурсивного программирования. Простота и изящество этого языка особенно поразительны в связи с использованием рекурсивных структур данных .
Задача особенно удобна для рекурсивного анализа, если она может быть разложена на совокупность подзадач того же типа, но меньшей размерности. В таком случае общая методика такого анализа содержит три этапа:
На протяжении всей этой главы мы будем следовать трем этим этапам - для первых примеров явным образом, а затем неявно. Тот порядок, в котором эти этапы описаны, представляется нам наиболее эффективным в общем случае.
Рекурсивные правила.
Рекурсия – это такой способ организации вычислительного процесса, при котором процедура в ходе выполнения составляющих ее операторов обращается сама к себе. При использовании рекурсии необходимо обращать особое внимание на выход из подпрограммы в нужный момент.
Рекурсия в логическом программировании применяется в двух случаях:
Рассмотрим первый случай. Отношения на языке Пролог описываются с помощью правил. Правило, содержащее свой заголовок в качестве предиката в правой части этого правила, называется рекурсивным. Рекурсивное правило реализует повторяющиеся действия. Рекурсивные правила эффективны при программировании циклических задач, при формировании запросов к базам данных и при обработке списков.
Для того, чтобы рекурсивная процедура завершалась, необходимо, чтобы в процедуру было включено условие выхода, гарантирующее окончание работы процедуры. Правило, содержащее условие выхода из рекурсии, является нерекурсивным.
В общем случае рекурсивная процедура имеет следующий вид:
<заголовок рекурсивного правила>:<предикат условия выхода>, <предикаты>.
<заголовок рекурсивного правила >:<предикаты>,
<заголовок рекурсивного правила >,<предикаты>.
<заголовок рекурсивного правила >:<предикаты>,
<заголовок рекурсивного правила >,<предикаты>.
…………………………………………..
<заголовок рекурсивного правила >:<предикаты>,
<заголовок рекурсивного правила >,<предикаты>.
НАЗАД Читать ДАЛЕЕ