Mecanismul de realizare a Recursivităţii
În general, la apelul unui subprogram, valorile parametrilor (valori sau adrese), precum şi valorile variabilelor globale sunt stocate pe stivă. În momentul terminării execuţiei subprogramului, stiva este eliberată.
Execuţia instrucţiunilor de apelare a subprogramelor recursive presupune gestionarea a două stive:
- stiva de valori : va memora valorile parametrilor actuali şi valorile variabilelor locale;
- stiva de protocol: va memora adresele de întoarcere în programul sau subprogramul apelant.
Cele două stive sunt gestionate automat de către sistem. Un apel recursiv produce următoarele acţiuni:
- Introducerea valorilor (în cazul apelului prin valoare) şi a adreselor (în cazul apelului prin referinţă) parametrilor din instrucţiunea de apelare în stiva de valori (stiva parametrilor);
- Introducerea valorilor variabilelor locale din subprogram în stiva de valori;
- Introducerea adresei primei instrucţiuni ce urmează apelului în stiva de protocol;
- Saltul la prima instrucţiune din subprogram.
O revenire din apel produce următoarele acţiuni:
- Se returnează valorile calculate;
- Se elimină vârful stivei de valori;
- Se revine la apelul precedent, la instrucţiunea indicată de vârful stivei de protocol;
- Se elimină vârful stivei de protocol;
OBSERVAŢIE
- La fiecare apel se creează un nou nivel în stivă;
- Abia atunci când a fost îndeplinită condiţia de terminare se trece la revenirea din apel. Funcţia care s-a autoapelat se reia de la instrucţiunea care urmează apelului recursiv. Ea va lucra cu variabilele locale reţinute în stivă în momentul autoapelului, la care se adaugă valorile calculate (în cazul funcţiilor) şi valorile modificate (în cazul transmiterii prin referinţă).