Proceduri Recursive

Embed Size (px)

DESCRIPTION

informatica

Citation preview

Proceduri recursive n majoritatea manualelor de informatic tema Recursia este expus doar prin exemple de funcii. Totodat, la exerciiile pentru rezolvare se propun exemple care necesit abordarea recursiei cu ajutorul procedurilor. ( Afiarea unui vector, inversia valorilor ntr-un vector .a). n acest articol mi expun propria viziune asupra temei i voi oferi cteva exemple de proceduri recursive.Pentru a nelege recursivitatea este nevoie de a face o incursiune n structura memoriei calculatorului. Toate subprogramele se lanseaz i ruleaz n segmentul de memorie steak, care are o structur de stiv. Stiva funcioneaz conform principiului FILO(primul intrat-ultimul ieit). n procesul derulrii subprogramelor deosebim dou etape: ncrcarea stivei i descrcarea ei, adic depunerea calculelor i calculele propriu zise. Presupunem c trebuie s afim un vector cu n elemente de tip ntreg. Regula de consisten e simpl n=n-1+1. Adic ni=ni-1+1. Valorile vectorului se vor depune n stiv att timp ct n>1 i se va finaliza cnd n=1. Prin n am nsemnat valoarea indicelui vectorului. Presupunem c avem un vector cu trei valori V[1]:=5;V[2]:=3;V[3]:=-6; Indicele maximal n=3.

Practic vom lucra cu variabila global de tip vector(array), iar pe stiv vom depune indicii.

Procedure afisvect(k:integer); Begin If k>1 then afisvec(k-1);

Write(v[k]:3);

End;

Fig. 1n fig. 1 este artat procesul de ncrcare a stivei. Apelul se efectueaz din blocul apelant afisvect(n) unde n=3. La primul apel ntruct n>1, indicele al 3-lea se depune pe ultimul nivel al stivei. La primul autoapel k=2 i pe primul nivel se depune indicele al 2-lea, iar indicele 3 se deplaseaz pe nivelul doi, la al doilea autoapel pe primul nivel se depune indicele 1, care deplaseaz indicii 2 i 3 pe nivelele respective. n acest moment se ndeplinete i condiia de oprire a autoapelurilor. Urmeaz descrcarea stivei. Fig. 2

Fig.2

Ca rezultat pe ecran vom avea un ir de numere 5 3 -6 ,care reprezint valorile vectorului V. Problema este rezolvat.

Exemplul urmtor vine s dezvolte proprietile procedurii prin inversia unui vector n el nsui:

Program cu_procedura;Type vector=array[1..200] of integer;

Var V:vector; j,n:integer;

Procedure invervec(k:integer);

Begin

If k