ВУЗ:
Составители:
Рубрика:
Рекурсии
Рекурсия - это такой способ организации вычислительного процесса,
при котором подпрограмма обращается сама к себе. Такая рекурсия
называется прямой. Рекурсии позволяют писать более короткие программы,
но при выполнении они работают медленнее и могут вызвать переполнение
стека, так как при каждом входе в подпрограмму ее локальные переменные
размещаются в программном стеке
, размер которого ограничен.
Типичным примером прямой рекурсии является вычисление 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; Позже, в необходимых местах, описываются сами процедуры или функции в обычном виде и в их заголовке параметры уже указывать не нужно.
Страницы
- « первая
- ‹ предыдущая
- …
- 68
- 69
- 70
- 71
- 72
- …
- следующая ›
- последняя »