Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример 1.10



Рекурсивная функция. Вычисление n!.

Function Fakt (N: Integer): Longint;

Begin

If N = 0 Then {Ветвь, определяющая конец рекурсии}

Fakt:= 1 {Возвращаемое значение функции}

Else

{*} Fakt:= N * Fakt (N - 1) {Возвращаемое значение функции}

End;

Запись имени функции Fakt в левой части оператора присваивания {*} показывает, что это возвращаемое значение функции. Вызов функции Fakt в правой части оператора {*} говорит об обращении к этой же функции, т.е. о рекурсивности.

Существует два вида рекурсии - явная и неявная (взаимная).

Явная рекурсия – это рекурсия, при которой обращение к подпрограмме содержится в теле самой подпрограммы.

Неявная (взаимная) рекурсия – это рекурсия, при которой обращение к подпрограмме содержится в теле другой подпрограммы, к которой производится обращение из данной подпрограммы.

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

Рекурсивность является не свойством подпрограммы, а лишь свойством ее описания. Ту же подпрограмму можно организовать и без рекурсии. Например, функцию из предыдущего примера можно реализовать без рекурсии следующим образом.





Дата публикования: 2014-12-11; Прочитано: 176 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.024 с)...