Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример 1.11



Нерекурсивная функция. Вычисление n! по формуле:

.

Function Fakt (N: Integer): Longint;

Var

I: Integer;

K: Longint;

Begin

K:=1;

For I:= 1 To N Do K:= K * I;

Fakt:= K; {Возвращаемое значение функции}

End;

Достоинство рекурсивной записи – в общем случае запись программы короче и нагляднее, чем нерекурсивная запись.

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

1.5. Директивы подпрограмм

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

В общем случае синтаксическая диаграмма тела подпрограммы имеет вид, который представляет рисунок 1.8.

Рисунок 1.8 – Синтаксическая диаграмма тела подпрограммы

В описании подпрограммы перед блоком может указываться директива прерывания Interrupt. Подпрограмма в этом случае рассматривается как подпрограмма прерывания.

Вместо блока в описании подпрограммы может быть записано опережающее описание (директива Forward), внешнее описание (директива Eхternal) или внутреннее описание (директива Inline).

Внешними подпрограммами следует пользоваться при необходимости в объединении большого количества объектных модулей. Описания External позволяют подключать отдельно скомпилированные подпрограммы, написанные на языке ассемблера. С помощью команды "L Имя_файла" для внешней подпрограммы должны быть установлены связи с программой или модулем на языке Паскаль.

Директивы Inline позволяют записывать вместо раздела операторов инструкции в машинном коде.

Описание подпрограмм типа Interrupt, Ecternal, Inline в данном учебном пособии не рассматривается.

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

Опережающее и определяющее описания в совокупности представляют собор полное описание подпрограммы. Подпрограмма считается описанной с помощью опережающего описания.

Определяющее описание может быть внешним описанием, но не может быть внутренним описанием или другим опережающим описанием. Определяющее описание не может содержать директиву Interrupt.

Между опережающим и определяющим описаниями могут описываться другие подпрограммы, которые могут обращаться к подпрограмме с опережающим описанием (рисунок 1.9). Таким образом может быть реализована взаимная (неявная) рекурсия.

Рисунок 1.9 – Организация взаимной рекурсии

Использование процедур со взаимной рекурсией при опережающем описании одной из процедур иллюстрирует программа, приведенная в примере 1.12.





Дата публикования: 2014-12-11; Прочитано: 181 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...