⊗pyPmFnRe 24 of 129 menu

Rekurzija u Pythonu

U programiranju postoji pojam, rekurzija - kada funkcija poziva samu sebe.

Primer . Jednostavna rekurzija sa brojačem

Hajde da ispišemo pomoću rekurzije brojeve od 1 do 10:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # ovde funkcija poziva samu sebe func()

Hajde da razmotrimo kako ovaj kod radi.

Imamo globalnu promenljivu i i funkciju func, unutar koje se u konzolu ispisuje sadržaj promenljive i, a zatim joj se dodaje jedinica.

Ako je naša promenljiva i manja ili jednaka 10, onda se funkcija poziva ponovo. Pošto je promenljiva i globalna, tada će pri svakom novom pozivu funkcije u njoj biti postavljena vrednost promenljive i iz prethodnog poziva.

Ispostavlja se da će funkcija pozivati samu sebe sve dok i ne postane veća od 10.

Imajte u vidu da u našem slučaju ne možemo funkciju pokrenuti bez if - ako se to uradi, dobićemo beskonačno pozivanje funkcija.

Primer . Rekurzija za ispis elemenata ugnježdenih listi

Najače se rekurzije primenjuju za prolazak kroz liste različitog stepena ugnježdenosti. Neka imamo sledeću listu:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Hajde da napravimo funkciju koja će proći kroz nju. U njoj prvo treba postaviti uslov, da element, koji je primitivan, tj. prosto izvučen broj iz liste, bude ispisan u konzolu. A ako je element objekat, na primer, ugnježdena lista, onda neka u tom slučaju funkcija pozove samu sebe, tj. desiće se rekurzija. Za proveru tipa elementa primenimo funkciju isinstance. Samo za naš primer u prvi parametar isinstance upisaćemo el, a drugim - tip list:

def func(lst): for el in lst: if isinstance(el, list): func(el) else: print(el)

Pri pozivu funkcije ispisaće se niz svih brojeva iz ugnježdene liste:

func(lst) # ispisaće 1, 2, ... 8, 9

Primer . Rekurzija za operacije sa elementima ugnježdenih listi

Rekurzije se mogu primeniti i za različite operacije sa elementima ugnježdenih listi. Neka imamo sledeću listu:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Hajde da dobijemo zbir svih njenih elemenata. Za ovo u funkciji deklarišimo promenljivu res, u koju će se nakupiti zbir brojeva. U uslovu upisaćemo da ako je element složen objekat, onda on pada u parametru funkcije func i dodaje se zbiru. Ovo znači da će element biti u rekurziji sve dok ne postane primitivan. I u tom slučaju će se prosto dodati zbiru, zapisanom u res:

def func(lst): res = 0 for el in lst: if isinstance(el, list): res += func(el) else: res += el return res

Hajde da pozovemo funkciju i ispišemo njen rezultat u konzolu:

print(func(lst)) # ispisaće 45

Primer . Rekurzija za nakupijanje u listu

Pomoću rekurzije možemo raščlaniti ugnježdene liste u jednu jednodimenzionalnu listu. Neka imamo sledeću listu:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Hajde da upišemo u funkciji praznu listu res, u koju će se nakupiti elementi početne liste. Zatim pokrenimo ciklus i postavimo uslov - ako element je lista, onda će da upadne u metod extend. Ovaj metod pridružuje elemente jedne liste na kraj druge liste, tj. elementi ugnježdene liste upašće na kraj liste res:

def func(lst): res = [] for el in lst: if isinstance(el, list): res.extend(func(el)) else: res.append(el) return res print(func(lst))

Rezultat izvršenog koda:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Praktični zadaci

Ispišite sve numeričke elemente rečnika proizvoljnog nivoa ugnježdenosti:

{ 'a': { 'b': 1, 'c': 2, 'd': { 'e': 3, 'f': 4 } }, 'j': { 'h': 5, 'k': 6, }, 'l': 7 }

Nađite zbir elemenata rečnika iz prethodnog zadatka.

Dobijte listu primitivnih elemenata rečnika iz prethodnog zadatka.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij