Рекурсивные подпрограммы



Download 219 Kb.
bet3/5
Sana21.02.2022
Hajmi219 Kb.
#57880
TuriЛекция
1   2   3   4   5
Bog'liq
Lection09

3. Рекурсивные подпрограммы
В теле подпрограммы доступны все объекты, описанные в программе, в том числе и имя самой подпрограммы. Процедуры и функции, использующие вызовы самих себя, называют рекурсивными (прямая рекурсия).
Рекурсия – это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения составляющих ее операторов обращается сама к себе.
Типичная рекурсивная процедура имеет вид:
procedure Rec (n:Integer);
begin
<действие на входе рекурсию>
if <проверка условия> then Rec(n-1);
<действия на выходе из рекурсии>;
end;
Рассмотрим пример рекурсивной функции вычисления хn, где x – целое число, а n – целое неотрицательное число.
Воспользуемся известным фактом:

function Deg(x, n: integer):longint;
begin
if n = 0 then Deg:=1
else Deg:=Deg(x, n-1)*x;
end;
На рис. 1 показаны прямой и обратный ход рекурсии. Обратите внимание, что в любой рекурсивной подпрограмме обязательно должна быть нерекурсивная ветвь, в нашем случае – это if n = 0 then Deg:=1
При выполнении рекурсивных подпрограмм используется специальная область памяти, называемая «стеком возвратов». В нем запоминаются адреса точек возврата и значения локальных переменных.
Пусть переменной a присваивается значение 24:

Рисунок 1 - Прямой и обратный ход рекурсии
Не следует путать рекурсию с итерацией – повторяемым выполнением некоторых действий до тех пор, пока не будет удовлетворяться некоторое условие. Хотя использование рекурсивной формы организации алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы, следует помнить, что при рекурсивном программировании велика вероятность ошибок, способных вынудить программиста к выполнению перезагрузки компьютера. Кроме того, если глубина рекурсии очень велика, то оттранслированная программа будет требовать во время выполнения много памяти, что может привести к переполнению стека.
В начале каждой рекурсивной процедуры или функции можно поместить строку if KeyPressed then Halt;, позволяющую при «зависании» программы выйти из нее без перезагрузки компьютера, простым нажатием любой клавиши. Функция KeyPressed возвращает результат true, если на клавиатуре была нажата клавиша, порождающая символ, и false – в противном случае. Например, оператор repeat until KeyPressed; содержит пустой оператор и обеспечивает паузу при выполнении программы до нажатия клавиши.



Download 219 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish