Погода
Календарь
Январь 2019
Пн Вт Ср Чт Пт Сб Вс
« Сен    
 123456
78910111213
14151617181920
21222324252627
28293031  
Страницы сайта

Рекурсивные алгоритмы.

РЕКУРСИВНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

  • Процедура (функция)– это вспомогательный алгоритм (фрагмент кода программы), который служит для выполнения определенных действий.
  • выполнения одинаковых действий в различных местах одной и той же программы;
  • разбивки программы (или другой процедуры или функции) на подзадачи для улучшения читаемости кода;
  • подпрограммы располагаются всегда выше основной программы:
  • сначала составляется заголовок процедуры или функции, в котором перечисляются формальные параметры, они обозначаются идентификаторами, как переменные (т.к. формальные параметры могут меняться, также как переменные):
var x,y:integer;
{ заголовок процедуры с формальными переменными x и y:}
procedure Sum(x,y:integer);
begin

end;
// основная программа
begin

end.

var x,y:integer;
{ заголовок функции с формальными переменными x и y:}
function Sum(x,y:integer):
integer;
begin

end;
// основная программа
begin

end.
  • в месте вызова процедуры в круглых скобках указываются фактические параметры (числовые значения либо арифметические выражения) в том же порядке:
  • функция вызывается немного иначе:
{ заголовок процедуры с формальными переменными x и y:}
procedure Sum(x,y:integer);
begin

end;
// основная программа
begin Sum(100,200)
end.
{ заголовок функции с формальными переменными x и y:}
function Sum(x,y:integer): integer;
begin

end;
// основная программа
begin
write (Sum(100,200))
end.
  • компилятор не будет выполнять процедуру (функцию) до момента ее вызова в основной программе;
  • пример работы процедуры и функции для сложения двух значений (порядок действий компилятора указан числами):
var x,y:integer;
procedure Sum(x,y:integer);
begin
//3. Выводим сумму двух запрошенных чисел
write(x+y);
end;
begin
// 1. запрашиваем два числа
readln(x,y);
// 2. передаем запрошенные числа в процедуру Sum(x,y)
end.
var x,y:integer;
function Sum(x,y:integer): integer;
begin
{3. Суммируем два числа и присваиваем значение функции:}
Sum:=x+y;
end;
begin
// 1. запрашиваем два числа
readln(x,y);
{2. передаем запрошенные числа в функцию и выводим результат:} write (Sum(x,y))
end.
  • Рекурсивной называется процедура, вызывающая сама себя:
procedure row(n:integer); 
begin
  if n >=1 then begin
write (n, ' ');
row(n-1)
  end;
end;
begin
row(10);
end.

Для использования рекурсии, необходимо задать:

  • условие остановки рекурсии (обычно, в виде условного оператора):
   if n >=1 then begin
  • рекуррентную формулу (обычно, вызов самой себя с измененным параметром):
row(n-1)

Top