Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Нерекурсивная функция. Вычисление 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!