Алгоритмические языки и программирование. Игошина Л.В. - 70 стр.

UptoLike

Составители: 

Рекурсии
Рекурсия - это такой способ организации вычислительного процесса,
при котором подпрограмма обращается сама к себе. Такая рекурсия
называется прямой. Рекурсии позволяют писать более короткие программы,
но при выполнении они работают медленнее и могут вызвать переполнение
стека, так как при каждом входе в подпрограмму ее локальные переменные
размещаются в программном стеке
, размер которого ограничен.
Типичным примером прямой рекурсии является вычисление n!.
nnn = )1(...321!
Текст программы с использованием прямой рекурсии для вычисления n!.
Var n:integer;
{Рекурсивная функция}
Function Fact(n:integer):real;
Begin
If n=0 then Fact:=1
Else Fact:=n*Fact(n-1);
End;
{ Главная программа}
Begin
Repeat
Writeln(' Введите положительное n<=33');
Readln(n);
Writeln(Fact(n));
Until Eof;
End.
Примечание: для выхода из этой программы можно задать значение
n>33 или нажать Ctrl/z и Enter. При n>33 возникает переполнение при
умножение чисел с плавающей запятой.
Рекурсивный вызов может быть также косвенным. В этом случае
подпрограмма обращается
к себе опосредованно, путем вызова другой
подпрограммы, в которой, в свою очередь, содержится обращение к первой.
Такой вызов иногда называют закольцованным.
Для реализации такой возможности в ТР используется опережающее
описание процедур и функций и директива Forward.
Для этого в самом начале программы вставляют только заголовки
процедуры или функции в виде:
Procedure имя
-процедуры(параметры);Forward;
или
Function имя_функции(параметры);Forward;
Позже, в необходимых местах, описываются сами процедуры или
функции в обычном виде и в их заголовке параметры уже указывать не
нужно.
                                         Рекурсии

      Рекурсия - это такой способ организации вычислительного процесса,
при котором подпрограмма обращается сама к себе. Такая рекурсия
называется прямой. Рекурсии позволяют писать более короткие программы,
но при выполнении они работают медленнее и могут вызвать переполнение
стека, так как при каждом входе в подпрограмму ее локальные переменные
размещаются в программном стеке, размер которого ограничен.
      Типичным примером прямой рекурсии является вычисление n!.
     n!= 1 ⋅ 2 ⋅ 3 ⋅ ... ⋅ (n − 1) ⋅ n
  Текст программы с использованием прямой рекурсии для вычисления n!.
     Var n:integer;
            {Рекурсивная функция}
       Function Fact(n:integer):real;
       Begin
            If n=0 then Fact:=1
            Else Fact:=n*Fact(n-1);
       End;
     { Главная программа}
  Begin
     Repeat
            Writeln(' Введите положительное n<=33');
            Readln(n);
            Writeln(Fact(n));
     Until Eof;
  End.
     Примечание: для выхода из этой программы можно задать значение
n>33 или нажать Ctrl/z и Enter. При n>33 возникает переполнение при
умножение чисел с плавающей запятой.
     Рекурсивный вызов может быть также косвенным. В этом случае
подпрограмма обращается к себе опосредованно, путем вызова другой
подпрограммы, в которой, в свою очередь, содержится обращение к первой.
Такой вызов иногда называют закольцованным.
     Для реализации такой возможности в ТР используется опережающее
описание процедур и функций и директива Forward.
     Для этого в самом начале программы вставляют только заголовки
процедуры или функции в виде:
     Procedure имя-процедуры(параметры);Forward;
                         или
     Function имя_функции(параметры);Forward;
     Позже, в необходимых местах, описываются сами процедуры или
функции в обычном виде и в их заголовке параметры уже указывать не
нужно.