русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Косвенная рекурсия


Дата добавления: 2015-08-06; просмотров: 1398; Нарушение авторских прав


Рекурсивные процедуры и функции имеют одну из двух форм: прямую или косвенную. Если процедура или функция р содержит явную ссылку на саму себя, это называется прямой рекурсией. Но может встретиться ситуация когда подпрограмма red ссылается на другую подпрограмму гес2, содержащую, в свою очередь, ссылку на red. To есть одна подпрограмма вызывает другую, которая либо сама, либо посредством других подпрограмм вызывает исходную. В этом случае мы имеем дело с косвенной рекурсией. Схема вызова в этом случае такова: red —> гес2 —> red.

В случае косвенной рекурсии возникает проблема: как и где описать вызываемую подпрограмму. По правилам языка Паскаль вызываемая подпрограмма должна быть описана до ее вызова. Но если red вызывает гес2, а гес2 вызывает red, то получается замкнутый круг. Для подобных ситуаций принято следующее правило: одна из вызывающих друг друга рекурсивных подпрограмм описывается предварительно следующим образом:

procedure <имя> (<список формальных параметров>); forward;

где <имя> — имя процедуры; forward — служебное слово, указывающее транслятору, что текст процедуры с именем <имя> помещен ниже. Аналогично описывается функция. Список параметров процедуры или функции и тип результата (для функции) включается только в предварительное описание и опускается в ее полном описании.

Например, пусть функция а вызывает функцию Ь, которая, в свою очередь, вызывает функцию а. Тогда эти функции можно описать следующим образом:

function a(x: integer): real; forward;

function b(y: integer): real; begin

b:=a(k)+3.5 end;

function a; begin

a:=b(m)-1.8 end.

 



<== предыдущая лекция | следующая лекция ==>
Рекурсивная функция | The profession of a teacher


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.061 сек.