8.6 Рекурсивті процедуралар жəне функциялар
Рекурсия - процедура немесе функция өз құрамына кіретін операторларды орындау барысында, өзін өзі немесе басқа про-цедура жəне функция арқылы өзін шақыратын есептеу процесін ұйымдастыру тəсілі.
Рекурсия тікелей немесе жанама болуы мүмкін. Тікелей рекурсия кезінде ішкі программаны шақыру операторы оның орындалу бөлімінде орналасады. Кез келген тікелей рекурсивті процедураны (функцияны) рекурсивсіз етуге болады. Рекурсивті сипаттама əдетте қысқы жəне көрнекті, бірақ көп машиналық уақытты (қайталап шақыру керек болғандықтан) жəне жадыны (айнымалылардың бірнеше рет қайталануынан) қажет етеді.
Рекурсивті ішкі программа бір рет сырттан шақырылады. Рекурсивті процедура немесе функцияның жұмысының аяқталау шарты оның өзінде жазылады.
Мысал қарастырайық. F=M! мəнін есептеу керек. Факториал мəнінің рекурсивті анықтамасын төмендегідей түрде жазуға бо-лады:
М=1 болғанда F=1
М> 1 болғанда F= M!= M*(M-1)!, демек М! (М-1)! арқылы анықталады.
Рекурсивті функция
PROGRAM MAIN; VAR M: INTEGER;
246
F:REAL;
FUNCTION FACT (N:INTEGER): REAL;
BEGIN
IF N=1 THEN
FACT:=1
ELSE
FACT:= N* FACT(N-1);
END;
BEGIN
READLN(M);
F:= FACT ( M );
WRITELN (‘ M!=’, F);
END.
Рекурсивті процедура
PROGRAM MAIN; VAR M: INTEGER;
F:REAL;
PROCEDURE FACT(N:INTEGER; VAR F: REAL);
VAR Q : REAL;
BEGIN
IF N=1 THEN Q:=1
ELSE FACT(N-1,Q);
F:=N*Q;
END;
BEGIN READLN(M); FACT ( M, F ); WRITELN (‘ M!=’, F);
END.
Есептің а) нұсқасында М=4 болғанда келесі іс-əрекет орында-лады:
FACT:=4*FACT(3); FACT:=3*FACT(2); FACT:=2*FACT(1); FACT(1):=1.
Функция бірінші рет шақырылғанда жадыдан параметр-мəнге сəйкес жергілікті айнымалылар үшін орын бөлінеді. Оған нақтылы параметрдің (М) мəні меншіктеледі. Функцияға əр кірген сайын жаңа жергілікті айнымалылар құрылады. FACT(1)=1
247
болғандықтан функцияның орындалуы тоқтатылады. Бұдан кейін келесі іс-əрекеттер орындалады:
FACT(1):=1; FACT:=2*FACT(1);
FACT(2):=2; FACT:=3*FACT(2);
FACT(3):=3*2=6; FACT:=4*FACT(3); т.е. FACT=24.
Достарыңызбен бөлісу: |