Sunteți pe pagina 1din 2

LUCRARE DE LABORATOR NR.

I. Obiectivele temei.

1.1. S explice termenii recursie direct;


1.2. S elaboreze subprograme recursive.
II. Coninutul temei.
Recursia se definete ca o situaie n care un subprogram se autoapeleaz fie direct, fie prin intermediul altei funcii
sau proceduri. Subprogramul care se autoapeleaz se numete recursiv. De exemplu, presupunem c este definit
tipul
Type Natural = 0..MaxInt;
Funcia factorial

poate fi exprimat n PASCAL, urmnd direct definiia, n forma:


function F(n : Natural) : Natural;
begin
if n=0 then F:=1 else F:=n*F(n-1)
end; {F}
Efectul unui apel F(7)este declanarea unui lan de apeluri ale funciei F pentru parametrii actuali 6, 5, ..., 2, 1, 0:
F(7) -> F(6) -> F(5) -> ... -> F(1) -> F(0).

Apelul F(0)determin evaluarea direct a funciei i oprirea procesului repetitiv; urmeaz revenirile din apeluri i
evaluarea lui F pentru 1, 2, ..., 6, 7, ultima valoare fiind ntoarcerea n locul primului apel.
Funcia

are ca valori numerele lui Fibonacci. Urmnd definiia, obinem:

function Fib(n:Natural):Natural;
begin
if n=0 then Fib:=0 else
if n=1 then Fib:=1 else
Fib:=Fib(n-1)+Fib(n-2)
end; {Fib}

Fiecare apel al funciei Fib pentru n>1 genereaz dou apeluri Fib(n-1),Fib(n-2) .a.m.d., de exemplu:
Fib(4) ->
Fib(3), Fib(2) ->
Fib(2), Fib(1), Fib(1), Fib(0) ->
Fib(1), Fib(0).
Sarcina: De elaborat un program care conine o funcie recursiv ce calculeaz:

S(n)=2+4+6+8+...

II. Programul in limbajul Pascal


program P5;
function f(n: integer): longint;
begin
if n=1 then f:=2
else
f:=f(n-1)+(n*2);
end;
var n: integer;
begin
readln(n);
writeln('S(n)= ', f(n));
end.

III.Fereastra programului in pascal:

IV.Rezultatele obtinute la executia programului.

V. Concluzie.

Pe parcursul elaborrii acestei lucrri am ntlnit dificulti fiindc nu am nvat aceast tem.

S-ar putea să vă placă și