русс | укр

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

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

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

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


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

Рекурсивные функции и процедуры


Дата добавления: 2014-11-27; просмотров: 547; Нарушение авторских прав


 

Если одна процедура (Pr_2) вызывает в своем разделе выполнения другую (Pr_1), то вызываемая процедура должна быть описана во внешней программе перед описанием вызывающей процедуры, либо внутри вызывающей процедуры. Возможны и циклические случаи: если процедура вызывает сама себя - прямая рекурсия , если обе процедуры вызывают в своих разделах выполнения друг друга - косвенная рекурсия.

 

Схема линейного взаимодействия процедур:

 

Pr_1 - раздел описания Pr_1 Pr_2 - раздел описания Pr_2

 

Pr_2 - раздел описания Pr_2 Pr_1 - раздел описания Pr_1

 

Вызов Pr_1 в процедуре Pr_2 Вызов Pr_1 в процедуре Pr_2

 

Внешняя программа Внешняя программа

 

Схема циклического взаимодействия процедур:

 

прямая рекурсия косвенная рекурсия

 

 

раздел описания программы Pr_2 - заголовок Pr_2 Forward;

 

Pr_1 - раздел описания Pr_1

 

Вызов Pr_2 в процедуре Pr_1

 

Pr_1 - раздел описания Pr_1

 

Pr_2 - раздел описания Pr_2

 

Вызов Pr_1 в процедуре Pr_1 Вызов Pr_1 в процедуре Pr_2

 

Внешняя программа Внешняя программа

 

Если процедура вызывает сама себя ( прямая рекурсия ), то она описывается как обычно. Рекурсия традиционно применяется для итерационного расчета значения функции с использованием результатов предыдущего шага. Например, для расчета выражений вида: X! ( X факториал ), XN ( X в степени N ), вычисляемых по формулам: XN= XN-1 * k, где k - постоянная или переменная величина. В общем случае рекурсия применяется при расчете функции от функции: FN(x) = FN-1(x). При этом процесс происходит в два этапа: обратное движение с запоминанием цепочки расчета в оперативной памяти и прямое движение - расчет с использованием полученной цепочки. Рекурсивные процедуры требуют больше памяти для запоминания промежуточных результатов, чем обычные циклические операторы, поэтому рекурсии используются реже. В случае рекурсивных процедур следует обязательно предусмотреть условие окончания вызова процедуры.



 

Приведем пример традиционного использования рекурсии. Пусть требуется рассчитать число осколков, полученных в результате деления тела за "N" миллисекунд, если каждый осколок делится на два за одну миллисекунду. Тогда при N=0 число осколков = 1, при N>0 число осколков = 2N = 2*2(N-1).

 

Функция, возвращающая число осколков, будет иметь вид:

 

Function K_O(N: word): Longint;

 

begin

 

if N=0 then K_O:=1 {условие окончания рекурсии}

 

else K_O:=2*K_O(N-1) {рекурсивный вызов}

 

end;

 

Пример функции, возвращающей число осколков, без использования рекурсии:

 

Function K_O(N: word): Longint;

 

var N_1: Longint; i: word;

 

begin

 

N_1:=1; for i:=1 to N do N_1:= 2*N_1; K_0:= N_1

 

end;

 

Если к каждому осколку добавляется два осколка, то число осколков = (1+2)N= 3*3(N-1).

 

Во внешней программе число осколков (переменная "NN") расчитывается вызовом функции:

 

NN:= K_O(t); где t - значение фактического параметра времени.



<== предыдущая лекция | следующая лекция ==>
Описание функций и процедур | Разработка модулей


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


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

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

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


 


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

 
 

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

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