Demistificarea recurgerii Python

Sarcinile cele mai complexe din Python pot fi împărțite în sub-sarcini mai simple. Recurgerea ajută la realizarea acestui lucru, făcând astfel codul curat și curat. Acest tutorial va introduce recursivitatea, beneficiile recursivității și modul de utilizare în programarea Python.

Ce este Recurgerea?

Recursia este o metodă de rezolvare a unei probleme cu soluțiile pentru instanțe mai mici ale aceleiași probleme. Această abordare poate fi aplicată mai multor tipuri de provocări în programare.

Beneficiile utilizării recurenței

Unele dintre beneficiile utilizării recursivității sunt:

  • Recursia adaugă simplitate la scrierea codului, ceea ce face mai ușor depanarea.
  • Recursia reduce timpul necesar unui algoritm pentru a funcționa ca o funcție a lungimii intrării.
  • Recurgerea este, de asemenea, preferată atunci când rezolvăm probleme foarte complexe, în special probleme legate de structurile bazate pe arbori, deoarece funcționează mai bine.

Introducere în funcția recursivă Python

Deși recursul pare a fi o procedură complicată, nu este atât de complicat. În termenii laicului, presupuneți că aveți două dreptunghiuri A și B. Dacă le adăugați împreună, ele formează un dreptunghi C. Aceasta este în sine o procedură recursivă. Am folosit instanțe mai mici de dreptunghi pentru a ne defini, și dacă am fi scris o funcție Python, ar fi după cum urmează:

Definiți dreptunghi (a, b): returnați a + b 

Deoarece o funcție recursivă se numește, trebuie să existe o regulă sau un punct de desprindere la care procesul sau bucla s-ar termina. O astfel de condiție este cunoscută ca o condiție de bază. O condiție de bază este o cerință în fiecare program recursiv, altfel procedura ar avea ca rezultat o buclă infinită.

A doua cerință este cazul recursiv atunci când funcția se solicită.

Să examinăm un exemplu:

În acest exemplu, veți scrie o funcție factorială care are un integer (pozitiv) ca intrare. Factorialul unui număr este obținut prin înmulțirea numărului cu toate numerele întregi pozitive de sub el. De exemplu, factorial (3) = 3 x 2 x 1, factorial (2) = 2 x 1, și factorial (0) = 1.

Primul lucru pe care trebuie să-l facem este să definim cazul nostru de bază, care va fi factorial (0) = 1.

După cum puteți vedea mai sus, există o relație între fiecare scenariu factorial consecutiv. Ar trebui să observați că factorial (4) = 4 x factorial (3). În mod similar, factorial (5) = 5 x factorial (4).

A doua parte va fi scrierea unei funcții care se numește ea însăși.

Acum că l-am simplificat, funcția rezultată va fi:

def factorial (n): if (n == 0): #Definiti cazul nostru de baza? returnați 1 else: returnați n * factorial (n-1) print (factorial (5)) #result # 120

Soluția dacă n == 0 este:

def factorial (n): if (n == 0): #Definiti cazul nostru de baza? returnați altceva: returnați n * factorial (n-1) imprimare (factorial (0)) #result # 0

Acum, că știți cum să scrieți funcții recursive, să analizăm mai multe studii de caz care vă vor consolida înțelegerea recurenței.

Studiu de caz 1: Fibonacci

Într-o secvență Fibonacci, fiecare număr este suma celor două numere precedente, cum ar fi: 1 + 1 = 2; 1 + 2 = 3; 2 + 3 = 5; 3 + 5 = 8. Secvența Fibonacci a fost aplicată în multe domenii, iar cea mai frecventă este prezicerea acțiunii de preț pe piața de valori de către comercianții din valută.

Secvența Fibonacci începe cu 0 și 1. Primul număr dintr-o secvență Fibonacci este 0, al doilea număr este 1, iar al treilea termen din secvență este 0 + 1 = 1. Al patrulea este 1 + 1 = 2 și așa mai departe.

Pentru a veni cu o funcție recursivă, trebuie să aveți două cazuri de bază, adică 0 și 1. Puteți apoi să traduceți modelul de adăugare în alt caz.

Funcția rezultată va fi:

(n == 1): #define Cazul de baza 1 retur 0 + 1 elif (n == 2): #define Cazul de baza 1 retur 1 + 2 altfel: return fibonacci (n) + fibonacci ( n-1) imprimare (fibonacci (5)) #result # 

Studiu de caz 2: inversarea unui șir

În acest exemplu, veți scrie o funcție care ia un șir ca intrare și apoi returnează inversul șirului.

Primul lucru pe care trebuie să-l facem este să definim cazul nostru de bază, care va verifica dacă șirul este egal cu 0 și, dacă da, va returna șirul în sine.

Cel de-al doilea pas este să apelați în mod recursiv funcția inversă pentru a despică partea din șir care exclude primul caracter și apoi să concatenați primul caracter până la sfârșitul șirului tăiat.

Funcția rezultată este după cum se arată mai jos:

Definiți inversa (a): dacă len (a) == 0: returnați altfel: inversa înapoi (a [1:]) + a [0] rezultatul #nrael din egaugnal ysae yrev a si nohtyP 

Studiu de caz 3: Suma elementelor

În acest exemplu, veți scrie o funcție care are ca input un matrice și apoi returnează suma elementelor din listă.

Primul lucru pe care trebuie să-l faceți este să definiți cazul de bază, care va verifica dacă mărimea listei este zero și returnează 0 dacă este adevărat.

Al doilea pas returnează elementul și un apel la suma funcției () minus un element din listă.

Soluția este prezentată mai jos:

def suma de numere (l): dacă len (l) == 1: întoarce 0 altfel: retur l [0] + suma (l [1:]) a = [5,7,3,8,10] a)] # rezultat # 33

Soluția pentru o listă goală este prezentată mai jos:

Definiți valoarea sumă a numerelor (l): dacă len (l) == 1: întoarceți altfel: returnați l [0] + suma (l [1:])

Concluzie

Acest tutorial a acoperit ceea ce este necesar pentru a utiliza recursivitatea pentru a rezolva programe complexe în Python. De asemenea, este important să rețineți că recursiunea are propriile limitări:

  • Recurgerea necesită mult spațiu pentru stivă, ceea ce înseamnă că este destul de lent pentru a menține programul.
  • Funcțiile de recurgere necesită mai mult spațiu și timp pentru a fi executate.

Amintiți-vă, nu ezitați să vedeți ceea ce avem la dispoziție pentru vânzare și pentru studierea pe piața Envato și vă rugăm să întrebați orice întrebări și să oferiți feedback-ul dvs. valoros folosind feed-ul de mai jos.

Cod