Раздел 3.5. Процедуры и функции в ЯП Паскаль. Рекурсия

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

Все процедуры и функции делятся на две группы:
стандартные и пользовательские (создаваемые разработчиком программы). Стандартные, входят в состав языка и вызываются для выполнения по своему имени. Процедура или функция представляет собой последовательность операторов, которая имеет имя, список параметров и может быть вызвана из различных частей программы.
И процедура, и функция должна иметь собственное имя и может содержать произвольное число операторов и даже внутренних процедур и функций. Любая используемая в программе процедура или функция должна быть предварительно описана в разделе описаний.

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

procedure имя(список формальных параметров);
раздел описаний
begin
операторы
end;

Описание функции:

function имя(список формальных параметров): тип возвращаемого значения;
раздел описаний
begin
операторы
end;

Операторы подпрограммы, окаймленные операторными скобками beginend, называются телом этой подпрограммы.

Рекурсия — это такой метод организации работы подпрограммы, при котором эта подпрограмма (процедура или функция) в ходе ее выполнения обращается сама к себе (т.е. вызов метода из тела самого метода). Рекурсивный стиль программирования довольно эффектен, но не очень эффективен, с точки зрения расходования ресурсов компьютера. Применение рекурсии увеличивает время исполнения программы и требует значительного объёма памяти. В связи с этим, предпочтительнее использовать не рекурсию, а итерацию.

В рекурсивных алгоритмах необходимо предусматривать условие завершения процесса, т.е. когда вызова больше не происходит.

Примером рекурсивного алгоритма, является программа вычисляющая факториал числа N.

Program Factorial;

var n:integer;

function f(x:integer):real; //определяем функцию f обращающуюся,

begin //к предыдущему значению самой себя,

if x = 1 then f:= 1 else f:= x * f(x-1); //для вычисления своего значения

end;

begin

writeln('Введите число N (N=1..170)'); //при N>170 возникает

readln(n); // ошибка «Вещественное переполнение»

writeln('Факториал N!=',f(n));

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: