You are on page 1of 20

PROGRAMIRANJE 2

Rekurzija

Robert Rozić, asis. dr. sc. Marko Rosić, prof.


Creative Commons
● Slobodno smijete:
○ dijeliti - umnožavati, distribuirati i javnosti priopćavati djelo
○ remiksirati - prerađivati djelo
● pod sljedećim uvjetima:
○ Imenovanje. Morate priznati i označiti autorstvo djela na način kako je specificirao autor ili
davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate
njegovu izravnu podršku).
○ Nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe.
○ Dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate koristeći ga,
preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog
djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće
je odstupiti, ako dobijete dopuštenje nositelja autorskog prava.
Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.
Tekst licence preuzet je s https://creativecommons.org/.

Programiranje 2
Rekurzija

- Rekurzija je postupak definiranja nečega u smislu samog sebe


- Primjer je postavljanje 2 zrcala 1 nasuprot drugog
- U računalnom programiranju i matematici, rekurzija je metoda rješavanja
problema gdje rješenje ovisi o rješenju manjih insanci istog problema.
npr. faktorijel, fibonaccijev niz itd.

To understand recursion, you first have to understand recursion.


Rekurzivne funkcije

- Rekurzija rješava rekurzivne probleme koristeći funkcije koje pozivaju same


sebe u svojoj definiciji.
- Ovaj pristup se može primijeniti na velikom opsegu problema i rekurzija je
jedna od centralnih ideja računarstva.
- Većina programskih jezika podržava rekurziju.
Rekurzivne funkcije

- U Python-u maksimalna dubina rekurzije je 1000.

- Ukoliko se prekorači limit, program će javiti RecursionError pogrešku.

def rekurzija():
return rekurzija()

rekurzija()
Rekurzivne funkcije

- Kada funkciju pozivamo unutar same sebe, to znači da će se ona ponavljati sve dok se ne

zadovolji neki uvjet koji će vratiti konačan rezultat

- Sve rekurzivne funkcije imaju strukturu koja se sastoji od dva dijela:

- Bazni slučaj

- Rekurzivni slučaj
Računanje n!

n! = n * (n-1) * (n-2) * … * 3 * 2 * 1
n! = n * (n-1)!
Računanje n!

def faktorijel(n):
# Bazni slučaj
if n == 1: # ili n == 0
return 1

# Rekurzivni slučaj: n! = n * (n-1)!


else:
return n * faktorijel(n-1)
Računanje n!
Računanje n!
Prednosti rekurzije

- Čist i elegantan kod

- Kompleksan zadatak se može rastaviti u jednostavnije pod-probleme

- Generiranje sekvenci je lakše pomoću rekurzije nego pomoću nekih

ugniježdenih iteracija
Nedostatci rekurzije

- Ponekad je logiku iza rekurzivnih funkcija teško upratiti

- Rekurzivni pozivi su skupi i neefikasni jer zauzimaju puno memorije i uzimaju

puno vremena.

- Rekurzivne funkcije je teško debugirati


Zadatak 1

Napisati rekurzivnu funkciju za Euklidov algoritam za pronalazak najvećeg zajedničkog djelitelja 2


broja.
Zadatak 2

Napisati rekurzivnu funkciju za vraćanje elemenata Fibonaccijevog niza.


Zadaća

Napisati rekurzivnu funkciju koja kao parametar prima string, a kao rezultat taj string ispisuje sa zada.
RealPython

Programiz

Youtube

Read this sentence and do what it says twice.


sumarum.sum.ba
Lozinka za pristup: Mostar2021! / Orasje2021!
marko.rosic@pmfst.hr
robert.rozic@fpmoz.sum.ba
HVALA NA POZORNOSTI !

You might also like