Funcții recursive în Python

În acest tutorial vom vedea Recursivitate cu exemple în Python. Recursivitatea în programare este o tehnică foarte puternică, se face cu funcții care se numesc singure, o văd ca un fel de buclă, deoarece același cod va fi repetat de mai multe ori, până când se ajunge la soluție.

Caracteristici pe care trebuie să le aibă o funcție recursivăCaz de bazaNe va permite să terminăm funcția la un moment dat și că apelurile infinite nu apar.
Caz recursivÎn acest caz, apelăm din nou funcția, dar ne vom apropia de soluție. Va arăta mai bine în exemple.

NotăEste important să fiți clar cu privire la cazul de bază și să știți că cazul recursiv se apropie de el și nu intră într-o stare de apeluri infinite, este o eroare obișnuită atunci când începeți cu recursivitatea.

Să trecem la exemple, care vor fi simple și scurte, astfel încât să poată fi bine asimilate.

Exemplul 1 - Factorial


În acest exemplu vom rezolvați factorialul unui numărDacă doriți să știți despre ce este factorialul, accesați acest link. Iată codul, iar mai jos explic funcția recursivă.
 def factorial (număr): if (număr == 0 sau număr == 1): returnează 1 else: returnează numărul * factorial (number-1) if __name__ == "__main__": try: num = int (input ("From Ce număr doriți să cunoașteți factorialul? ")) Dacă (num <0): print (" Numărul trebuie să fie mai mare sau egal cu 0 ") altceva: print (" Factorialul lui ", num," este ", factorial (num)) cu excepția: print (" Se așteaptă un număr ") 
Funcția noastră recursivă are cazul de bază în cazul în care și cel recursiv în celălalt. Puteți vedea că cazul de bază returnează 1 și că acest lucru este atins atunci când parametrul trecut la funcție este 0 sau 1, când se ajunge la acest caz funcția nu mai apelează. În cazul recursiv avem un apel al funcției către sine, dar cum puteți vedea reducerea parametrului cu 1 (ne apropiem de cazul de bază). Ultima parte a codului din afara funcției este responsabilă numai de a cere utilizatorului un număr și de a verifica dacă este mai mare sau egal cu 0 să apeleze funcția, deoarece factorialul cu numere negative nu funcționează.

Dacă apelăm la funcția cu numărul 4, adică factorial (4), avem următoarele apeluri:

 Apel 1: factorial (4) Apel 2: 4 * factorial (3) Apel 3: 3 * factorial (2) Apel 4: 2 * factorial (1)
Când se apelează factorial cu 1, nu mai există apeluri și acesta va reveni la 1, atunci această funcție returnează returnarea rezultatelor la funcția pe care o numesc, returnarea ar fi astfel:
 factorial (1) = 1 factorial (2) = 2 * 1 factorial (3) = 3 * 2 factorial (4) = 4 * 6
Și avem deja rezultatul nostru, care este 24, din înmulțirea numerelor: 1 * 2 * 3 * 4. În continuare las o captură de ecran când cer factorialul 5, care nu este altceva decât înmulțirea 5 cu factorialul 4 (despre care știm deja că este 24), rezultând 120. Puteți vedea, de asemenea, dacă utilizatorul introduce numărul greșit, este:

Exemplul 2 - Adunare / scădere


În acest exemplu am pus o funcție recursivă pentru a face o adunare sau o scădere, desigur acest exemplu nu apare de obicei în viața reală, dar ca exemplu funcționează:
 operare def (număr1, număr2): dacă (număr2 == 0): returnare număr1 elif (număr2 <0): operație de returnare (număr1-1, număr2 + 1) altceva: operație de returnare (număr1 + 1, număr2-1) dacă __name__ == "__main__": print ("Adăugarea 10 și 3:", operați (10, 3)) print ("Adăugarea 5 și -2:", operați (5, -2)) 
Aici avem un caz de bază și 2 cazuri recursive, acesta este pentru a ști pe ce cale să atingem, deoarece, în funcție de faptul dacă numărul este pozitiv sau negativ, va trebui să acționăm diferit. Funcția de operare primește 2 numere, iar algoritmul se va ocupa de scăderea sau adăugarea unuia la numărul2 și trecerea la numărul1 (Dacă numărul2 este pozitiv, scad 1 din numărul2 și îl adaug la numărul1), deci până când variabila număr2 este egală la 0.

De exemplu, vom adăuga 3 + 2 văzând apelurile.

 Apel 1: operare (3,2) Apel 2: operare (4,1) Apel 3: operare (5,0)
În acest caz, când ajungem să operăm (5,0) nu mai avem nimic de făcut, avem rezultatul direct (spre deosebire de cazul factorialului care trebuia să facă înmulțirea). Iată rezultatul executării codului:

NotăDeși cu recursivitate avem o soluție elegantă și, în mod normal, mai scurtă ar trebui utilizată atunci când nu avem altă opțiune, dacă putem trage de varianta sa iterativă va fi o alegere mai bună, deoarece consumă mai puțină memorie și este de obicei mai rapidă.

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave