Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 2).doc
Скачиваний:
98
Добавлен:
15.04.2015
Размер:
2.24 Mб
Скачать
  1. Рекурсия и итерация

Рекурсия - это определение понятия самого через себя. В случае процедур и функций рекурсия используется в виде вызова функции самой себя в собственном теле. Это делается обычно для последовательного понижения размерности задач, пока решаемая задача не станет тривиальной. Запись решения задачи в виде последовательности рекурсивных вызовов функции обычно выглядит более понятно (более просто) по сравнении с обычным (нерекурсивным) решением.

Одно и то же вычисление факториала можно сделать несколькими способами:

n

fact(n) =1*2*3*4*...*n = i нерекурсивное (итерационное) решение

i=1

Рекурсивное решение имеет вид:

1,при n =0

fact(n) =

fact(n-1)*n при n >0.

4!=(3!)*4

При таком задании имеем следующую цепочку вызовов:

Fact(3) 3*Fact(2) 3*( 2* Fact(1) ) 3*( 2*( 1* Fact(0)))

Fact(0)=1 завершает цепочку рекурсивных вызовов.

По завершению последнего вызова функции, Паскаль должен возвратить значение от каждого рекурсивного вызова, начиная с последнего.

  1. Процедуры и функции как параметры

В качестве формальных параметров допускается использовать имена процедур или функций. При вызове подпрограммы на место формальных параметров процедур или функций осуществляется подстановка имен со­ответствующих им фактических процедур или функций.

Для передачи функций и процедур в качестве параметров в Турбо Паскале используется понятие процедурного типа, определяющего, какой вид подпрограммы (процедуру или функцию) можно использовать в качестве параметра и с какими параметрами, в свою очередь, должна быть эта подпрограмма. При объявлении процедурного типа указывается заголовок процедуры/функции, в котором опускается ее имя. Фактически этот параметр является параметром-значением, т. к. записывается без зарезервированного слова var.

Синтаксическая диаграмма процедурного типа:

Тип - процедура

Тип- функция

Туре

Proc_0 = Procedure; {тип-процедура}

Ргос_2 = Procedure(Var х, у); {тип-процедура }

Ргос_3 = Procedure(a, b : real; Var у : real); {тип-процедура}

Func_0 = Function : integer; {тип-функция }

Func_1 = Function(s : real): real; {тип-функция }

Установлены следующие правила использования подпрограмм в качестве параметров:

  • правила совместимости: процедурные типы для совместимости по присваиванию должны иметь одинаковое число формальных параметров, а параметры на соответствующих позициях в заголовках, должны иметь эквивалентный тип. Кроме того, для функций должны совпадать типы возвращаемых значений.

  • они не должны объявляться внутри других процедур или функций;

  • для установки правильных связей между вызывающими и вызываемыми подпрограммами они должны компилироваться с директивой компилятору {SF+} или иметь в заголовке опцию Far, что определяет «дальнюю» модель вызова этих подпрограмм и формирование их полного адреса;

  • согласно принципу опережающего описания объектов в Паскале, процедура или функция может обращаться только к той процедуре или функции, описание которых располагается перед описанием вызывающей процедуры или функции.

  • они не должны быть стандартными процедурами или функциями;

Соседние файлы в папке WORD