Рекурсивные подпрограммы
Иногда требуется, чтобы подпрограмма вызывала сама себя. Такой способ вызова называется рекурсией. Рекурсия полезна в случаях, когда основную задачу можно разбить на подзадачи, каждая из которых реализуется по алгоритму, совпадающему с основным.
Рассмотрим, например, вычисление факториала числа:
- function Fact(n: integer): integer;
- begin
- if n <= 0 then Fact := 1 else Fact := n * Fact(n-l);
- end;
Функция Fact () получает число n и вычисляет его факториал. При этом, если значение n меньше или равно нулю, то функция возвращает значение 1, в противном случае, уменьшив значение n на единицу, функция вызывает сама себя. Подобный рекурсивный вызов выполняется до тех пор, пока n не станет равным единице.
Функция Fact () и ее параметр имеют тип integer, что соответствует типу Longint х и позволяет вычислять факториал для достаточно небольших значений n (не более 31). Для увеличения диапазона значений можно использовать вещественные типы, например, Real.