Recurgerea indirectă

Programul de mai sus, folosind un recursie așa-numita directă, atunci când organismul unei proceduri conținea o provocare directă în sine. În PASCAL a permis, de asemenea, recursivitate indirectă, atunci când, de exemplu, procedura, procedura A apelează procedura B, și ea, la rândul său, - Procedura A. Lungimea lanțului de apel poate fi arbitrară, dar este necesar să se monitorizeze cu atenție evoluția programului pentru cei la algoritmul recursiv a fost de convergență, adică, nu a dus la interminabile apel subrutina reciprocă.







Recurgerea indirectă poate fi descrisă în acest fel. În fața oglinzii 1 există o oglindă 2, în care este reflectată oglinda 1. În ea se poate vedea oglinda 2, etc.







Iată un exemplu de program care ilustrează apelurile de procedură indirectă recursivă. În acest program, procedurile Rec1 și Rec2 se recurtă reciproc, reducând alternativ parametrii reali. Este ușor de observat că ambele proceduri funcționează cu o variabilă globală A, care le este transmisă prin referință. Criteriul de finalizare a lucrării este de a transforma această variabilă la zero.

Rețineți că programul necesită o definiție preliminară a celei de-a doua proceduri Rec2, deoarece apelul său are loc în procedura Rec1, adică înainte de descrierea completă.

Programul KosvRecurs;
var
A. număr întreg;
Procedura Rec2 (Var Y: întreg); Transmite;

Procedura Rec1 (Var X: întreg);
începe
X: = X-1;
dacă X> 0
atunci
REC2;
writeln (X)
End;

Procedura Rec2 (Var Y: întreg);
începe
Y: = Y div 2;
dacă Y> 2
atunci
REC1;
writeln (Y)
End;







Articole similare

Trimiteți-le prietenilor: