You are on page 1of 2

REKURZIJA

Razmatranje rekurzivnih postupaka najbolje je početi s nekim matematičkim problemom.


Npr. izračunavanje sume N brojeva.
SumaN=1+2+3+…+N
SumaN-1=1+2+3+…+(N-1)

To znači da sumu N brojeva možemo napisati kao SumaN= SumaN-1 +N. Ovakvu relaciju
nazivamo rekurzivnom relacijom jer u svakom koraku koristimo istu formulu za manju
vrijednost parametra.

U Pascalu možemo pisati rekurzivne procedure i funkcije koje u tijelu pozivaju same
sebe za manju vrijednost parametra. Za gornji primjer to znači da možemo napisati
rekurzivnu funkciju suma(n) koja će u tijelu imati poziv same sebe za vrijednost
parametra n-1 (suma(n-1)).

function suma(n:integer):integer,
begin
if n=1 then suma:=1
else suma:=suma(n-1)+n;
end;

Važno je napomenuti da uvijek treba osigurati uvjet kod kojeg će prestati pozivanje
funkcije (u ovom slučaju kad se n smanji na 1). Naime, rekurzija se počinje izvoditi tek
kad dođe do rubnog uvjeta.
Kako se izvršava gornja funkcija za broj 5 :
1. korak suma=suma(4)+5

2. korak suma=suma(3)+4+5
kurzivnom unkcijom
3. korak suma=suma(2)+3+4+5

4. korak suma=suma(1)+2+3+4+5

5. korak suma=1+2+3+4+5

1. zadatak:
Treba izračunati produkt prvih n brojeva koristeći se rekurzivnom funkcijom.

Pn=Pn-1*n

funkction produkt(n:integer):longint;
begin
if n=1 then produkt:=1
else produkt:=produkt(n-1)*n;
end;
2. zadatak:
Program računa n-ti broj Fibonaccijevog niza (1, 1, 2, 3, 5, 8,…).

Fn= Fn-1+ Fn-2


Točka prekida je očito kod n=1 F(1)=1.

function fib(n:integer);
begin
if n=1 then fib:=1
else fib:=fib(n-1)+fib(n-2);
end;

3. zadatak:
4. zadatak:
5. zadatak:
Naravno, treba dobro odvagnuti razloge za korištenje rekurzije. Ukoliko se problem
može riješiti bez rekurzije to je bolji odabir jer s rekurzijom je vrijeme izvođnja
obično dulje.

You might also like