Conceptul funcției recursive Python: Tutorial Python pentru începători

Publicat: 2020-03-18

În lumea informatică, recursiunea se referă la tehnica de a defini un lucru în termenii săi. Cu alte cuvinte, o funcție recursivă se autoapelează pentru procesare. În acest articol, vom înțelege conceptul de funcție recursivă în Python , un limbaj de programare utilizat pe scară largă al secolului 21.

Cuprins

Ce este recursiunea Python ?

În Python, un grup de declarații înrudite care efectuează o anumită sarcină este denumit „funcție”. Deci, funcțiile vă împart programul în bucăți mai mici. Și este cunoscut faptul că o funcție poate apela alte funcții în Python.

Dar unele alte funcții se pot numi singure. Acestea sunt cunoscute ca funcții recursive. Luați în considerare două oglinzi paralele plasate una față de alta. Acum, orice obiect care este ținut între oglinzi ar fi reflectat recursiv.

Să intrăm în detalii despre funcția recursivă pentru a înțelege clar funcționarea acesteia.

Funcția recursivă

Știm că o funcție recursivă în Python se numește pe sine așa cum este definită prin expresii autoreferențiale, adică în termenii ei înșiși. Își repetă comportamentul până când este îndeplinită o anumită condiție pentru a returna o valoare sau un rezultat. Să ne uităm acum la un exemplu pentru a afla cum funcționează.

Citiți și: Întrebări și răspunsuri la interviu Python

Să presupunem că doriți să aflați factorialul unui număr întreg. Factorial nu este altceva decât produsul tuturor numerelor, începând de la 1 până la acel număr întreg. De exemplu, factorialul lui 5 (scris ca 5!) ar fi 1*2*3*4*5*6, adică 720. Avem o funcție recursivă calc_factorial(x), care este definită după cum urmează:

def calc_factorial(x):

#Funcție recursiva pentru a găsi factorialul unui întreg

dacă x == 1:

întoarce 1

altfel

return (x * calc_factorial(x-1))

Ce s-ar întâmpla dacă numiți această funcție cu un număr întreg pozitiv precum 4? Ei bine, fiecare apel de funcție va adăuga un cadru de stivă până ajungem la cazul de bază (când numărul se reduce la 1). Condiția de bază este necesară pentru ca recursiunea să se termine și să nu continue la infinit. Deci, în cazul dat, valoarea 24 va fi returnată după al patrulea apel.

Implementarea funcției recursive în Python

Pot exista aplicații variate ale funcțiilor recursive în Python. De exemplu, doriți să faceți un grafic cu un model repetat, să spunem un fulg de zăpadă Koch. Recursiunea poate fi folosită pentru generarea de modele fractale, care sunt alcătuite din versiuni mai mici ale aceluiași design.

Un alt exemplu este cel al rezolvării jocurilor. Puteți scrie algoritmi recursivi pentru rezolvarea Sudoku-urilor și a numeroaselor jocuri complexe. Recursiunea este folosită cel mai frecvent în probleme de căutare, sortare și traversare.

O caracteristică izbitoare a funcției este că implementarea recursivă permite întoarcerea. Deci, recursiunea se referă la construirea unei soluții în mod incremental și eliminarea acelor soluții care nu satisfac constrângerile problemei în nicio etapă. Două lucruri sunt necesare pentru a realiza acest lucru – menținerea stării și a structurii adecvate a datelor. Citiți mai departe pentru a vă familiariza cu acești termeni.

Citiți: Salariu pentru dezvoltatori Python în India

Mentinerea statului

Fiecare apel recursiv în Python are propriul său context de execuție. În timp ce vă ocupați de funcții recursive în Python, trebuie să treceți starea prin fiecare apel recursiv. Cu aceasta, starea curentă devine o parte a contextului de execuție al apelului curent. De asemenea, puteți menține statul în sfera globală.

De exemplu, dacă utilizați recursiunea pentru a calcula 1+2+3+4+…….+10. Aici, numărul curent pe care îl adăugați și suma acumulată până la acel punct formează starea pe care trebuie să o mențineți. Menținerea stării implică trecerea stării actuale actualizate ca argumente prin fiecare apel. Iată cum o poți face.

def sum_numbers(număr_curent, sumă_cumulată)

#Caz de baza

#Reveniți starea finală

dacă numărul curent==11:

returnează suma_cumulată

#caz recursiv

#Thread starea prin apel recursiv

Altfel:

returnează numere_sumă(număr_actual + 1, sumă_cumulată + număr_actual)

Alternativ, puteți utiliza starea globală mutabilă. Pentru a menține starea folosind această metodă, păstrați starea în domeniul global.

număr_actual = 1

suma_acumulată = 0

def sum_numbers():

număr_actual global

suma_cumulată globală

#Caz de baza

dacă numărul_actual==11

returnează suma_cumulată

#caz recursiv

altceva:

suma_acumulată = suma_acumulată + număr_actual

număr_actual = număr_actual + 1

returnează sum_numbers()

Structuri de date recursive

O structură de date este considerată recursivă dacă poate fi definită în termeni de versiuni mai mici și mai simple ale acesteia. Exemple de structuri de date recursive includ liste, arbori, structuri ierarhice, dicționare etc. O listă poate avea alte liste ca elemente. Un arbore are sub-arbori, noduri de frunze și așa mai departe.

Este important de remarcat aici că structura funcțiilor recursive este adesea modelată după structurile de date pe care le ia ca intrări. Deci, structurile de date recursive și funcțiile recursive merg mână în mână.

Recursiune în calculul Fibonacci

Matematicianul italian Fibonacci a definit pentru prima dată numerele Fibonacci în secolul al XIII-lea pentru a modela creșterea populației de iepuri. El a dedus că pornind de la o pereche de iepuri din primul an, numărul de perechi de iepuri născute într-un anumit an este egal cu numărul de perechi de iepuri născute în fiecare din ultimii doi ani. Acesta poate fi scris ca: Fn = Fn-1 + Fn-2 (Cazuri de bază: F0=1 și F1=1).

Când scrieți o funcție recursivă pentru a calcula numărul Fibonacci, aceasta poate duce la recursivitate naivă. Acest lucru se întâmplă atunci când definiția funcției recursive este urmată în mod naiv și ajungeți să recalculați valorile inutil. Pentru a evita recalcularea, puteți aplica lru_cache decorator funcției. Memorează în cache rezultatele și salvează procesul de a deveni ineficient.

Citiți mai multe: Top 10 instrumente Python pe care fiecare dezvoltator Python ar trebui să le cunoască

Avantaje și dezavantaje ale recursivului

Recursiunea ajută la simplificarea unei sarcini complexe, împărțind-o în sub-probleme. Funcțiile recursive fac cod mai curat și, de asemenea, generează secvențe necomplicate. Dar recursiunea nu vine fără limitările sale. Uneori, apelurile se pot dovedi costisitoare și ineficiente, deoarece consumă mult timp și memorie. Funcțiile recursive pot fi, de asemenea, dificil de depanat.

Încheierea

În acest articol, am acoperit conceptul de recursivitate Python , l-am demonstrat folosind câteva exemple și am discutat, de asemenea, unele dintre avantajele și dezavantajele sale. Cu toate aceste informații, poți explica cu ușurință funcțiile recursive în următorul tău interviu Python!

Dacă sunteți curios să aflați despre știința datelor, consultați Diploma PG în știința datelor de la IIIT-B și upGrad, care este creată pentru profesioniști care lucrează și oferă peste 10 studii de caz și proiecte, ateliere practice practice, mentorat cu experți din industrie, 1- on-1 cu mentori din industrie, peste 400 de ore de învățare și asistență profesională cu firme de top.

De ce este recursiunea atât de importantă?

Dacă ești programator, atunci este foarte important să gândești recursiv. Motivul este că funcțiile recursive vă vor ajuta să descompuneți un program complex într-unul mai mic. Veți observa, de asemenea, că soluțiile recursive sunt mult mai ușor de citit în comparație cu cele iterative.

Veți vedea adesea că anumite programe ocupă o cantitate imensă de spațiu și linii de cod pentru funcționare. Există mai multe scenarii în care aceste programe pot fi simplificate prin adăugarea unei funcții recursive, astfel încât funcția să fie apelată din nou și din nou ori de câte ori este necesar. Deci, nu va trebui să scrieți atât de multe linii de cod suplimentare, iar munca se face, de asemenea, eficient.

Care sunt aplicațiile recursiunii?

Există o mulțime de aplicații practice ale recursiunii văzute atât în ​​funcțiile de calcul, cât și în viața reală. Fără utilizarea recursiunii, nu este posibil să se exprime anumite funcții matematice, cum ar fi succesiunea Fibonacci, funcția Ackermann, pentru a determina dacă un număr este un palindrom sau nu, pentru a desena un tip de fractal și multe altele.

Există mai multe software și aplicații care sunt construite prin aceste funcții matematice. De exemplu, Candy Crush folosește aceste funcții matematice și recursivitate pentru generarea unei combinații de plăci. În afară de asta, șahul este, de asemenea, un exemplu clasic de aplicare a recursiunii. Majoritatea algoritmilor de căutare pe care îi folosim astăzi folosesc și recursiunea.

Care sunt regulile fundamentale ale recursiunii?

Funcțiile recursive sunt cele care se pot numi singure pentru rezolvarea unei probleme complexe prin simplificarea acesteia în diferiți pași mici. Există patru reguli fundamentale ale recursiunii. Trebuie să existe un caz de bază care să poată fi rezolvat fără ajutorul recursiunii. Fiecare caz care ar trebui rezolvat recursiv ar trebui să facă întotdeauna progrese către cazul de bază. Utilizați dovada prin inducție în regula de proiectare pentru a presupune că toate apelurile recursive funcționează. Nu ar trebui să utilizați niciodată apeluri recursive separate pentru a rezolva aceeași instanță a problemei. În schimb, ar trebui să mergi cu programarea dinamică.