Ce este recursiunea și cum o folosești?

Ce este recursiunea și cum o folosești?

Recursiunea este un concept de programare distractiv, dar poate fi puțin dificil de învățat. Recursiunea înseamnă pur și simplu ceva care se repetă. Dacă doriți să vedeți un exemplu obraznic de recursivitate, încercați să căutați recursiunea pe Google. Veți găsi un ou de Paște în care sugestiile rezultatelor căutării sunt recursive. Dacă, pe de altă parte, doriți să învățați cum să codificați o funcție recursivă, citiți mai departe!

Ce este o funcție recursivă?

O funcție recursivă este o funcție care se autoinvocă. În esență, creați o buclă cu o funcție. După cum vă puteți imagina, acestea pot fi funcții dificil de scris. Nu doriți ca codul dvs. să ruleze pentru totdeauna.

Similar cu o buclă, o funcție recursivă va fi controlată de o condiție. Odată ce condiția este îndeplinită, funcția încetează să se mai apeleze, ceea ce oprește bucla. Acesta este modul în care puteți crea o funcție care se autoapelează fără ca aceasta să ruleze pentru totdeauna.

Deși o funcție recursivă acționează ca o buclă, ea este executată de computer în mod diferit. Deci, unii algoritmi sunt mai eficienți într-o buclă, iar alții beneficiază de o funcție recursivă. Dar înainte de a ne uita la cum să folosiți o funcție recursivă, trebuie să știți cum să scrieți una.

Cum se scrie o functie recursiva

Toate funcțiile recursive au aceeași structură de bază:

FUNCTION name IF condition THEN RETURN result ELSE CALL FUNCTION name END FUNCTION

Exemplul de mai sus este scris în pseudo-cod. Acesta conturează structura funcției, care poate fi aplicată oricărei limbi. Pentru simplitate, în acest articol, ne vom concentra pe Python.

Primul lucru de remarcat despre o funcție recursivă este că atunci când condiția este îndeplinită, funcția iese din recursivitate. Aceasta înseamnă că atunci când scrieți o funcție recursivă, primul lucru pe care veți dori să determinați este când să opriți recursiunea.

Dacă condiția nu este îndeplinită, funcția se va autoapela. Deci, dacă doriți să trimiteți informații la următoarea buclă, va trebui să o trimiteți ca argument în funcția dvs. Acest lucru poate oferi funcțiilor recursive mult mai multă putere.

Înrudit: Ce este o funcție în programare?

Exemplu de funcție recursive în Python

Va fi mult mai ușor de înțeles cum funcționează recursiunea când o vei vedea în acțiune. Pentru a o demonstra, să scriem o funcție recursivă care returnează factorialul unui număr.

Factorialii returnează produsul unui număr și al tuturor numerelor întregi dinaintea acestuia. De exemplu, factorialul lui 5 este 5 x 4 x 3 x 2 x 1 sau 120.

def factorialFunction(numberToMultiply): if numberToMultiply == 1 : return 1 else : return numberToMultiply * factorialFunction(numberToMultiply - 1) result = factorialFunction(3) print(result) //Outputs: 6

Programul de mai sus vă va oferi rezultatul 6, care este factorialul numărului 3. Acest lucru poate fi puțin confuz la început. Va ajuta dacă parcurgem programul pas cu pas.

  1. Când funcția este apelată, numberToMultiply este egal cu 3.
  2. Condiția nu este îndeplinită, așa că trecem la starea else .
  3.  Funcția noastră returnează 3 *, dar este apoi întreruptă. Trebuie să se autoinvoce pentru a determina restul valorii pe care o returnează.
  4. Când funcția este apelată de data aceasta, valoarea numărului pentru înmulțire este egală cu 2.
  5. Condiția nu este îndeplinită, așa că trecem la starea else.
  6. Funcția noastră returnează 2 *, dar este apoi întreruptă. Trebuie să se autoinvoce pentru a determina restul valorii pe care o returnează.
  7. Funcția este apelată din nou. De data aceasta, valoarea numberToMultiply este egală cu 1.
  8. Condiția noastră dacă este îndeplinită. Funcția returnează 1.
  9. Funcția de la pasul 6 poate reveni acum 2 * 1 la funcția de la pasul 3.
  10. Funcția de la pasul trei poate returna acum 3 * 2 * 1, care este 6.

Ce este recursiunea și cum o folosești?

Recursiunea este un concept complicat. Poate fi util să ne gândim la asta ca stivuirea unei funcții peste o altă funcție. Odată ce o funcție este în sfârșit rezolvată, poate trimite informațiile înapoi în stivă, până când toate funcțiile își au răspunsul.

Acesta este de fapt ceea ce face computerul dvs. Când apelați funcția, aceasta este păstrată în memorie până când este returnată. Aceasta înseamnă că funcțiile recursive pot folosi mult mai multă memorie decât o buclă.

Deci, s-ar putea să nu fie eficient să scrieți bucle ca funcții recursive, dar este o modalitate excelentă de a exersa construirea lor. Ar trebui să puteți codifica buclele ca funcții recursive cu rezultate similare.

Un exemplu despre cum să convertiți o buclă într-o funcție recursiv

print("Enter an even number:") i = int(input()) while (i % 2) != 0 : print("That number is not even. Please enter a new number:") i = int(input())

Această buclă poate fi, de asemenea, scrisă recursiv ca:

def recursiveFunction(number) : if (number % 2) == 0 : return number else: print("That number is not even. Please enter a new number:") recursiveFunction(int(input())) print("Enter and even number:") i = recursiveFunction(int(input()))

Primul pas este să determinați când doriți să se oprească funcția. În acest caz, dorim să se oprească odată ce este introdus un număr par. În exemplul nostru, numărul urmărește intrarea utilizatorului. Dacă introduc un număr par, returnăm numărul. În caz contrar, vom continua să cerem un număr nou.

Pentru a configura bucla, apelăm din nou funcția noastră. Dar de data aceasta, numărul pe care îl trecem la următoarea funcție este noul număr introdus de utilizator. Următorul apel de funcție va verifica numărul.

Aceasta este o funcție foarte proastă! Da, verifică dacă numărul este par, ca bucla noastră, dar nu este eficient. De fiecare dată când utilizatorul introduce un număr impar, funcția este păstrată în memorie și este apelată o nouă funcție. Dacă faci asta de destule ori, vei rămâne fără memorie!

Înrudit: Exemple de bază Python care vă vor ajuta să învățați rapid

Un exemplu real al unei funcții recursive

Exemplele de mai sus au fost exemple bune de când nu trebuie folosit recursiunea. Deci, unde se folosește recursiunea? Un exemplu bun de când doriți să utilizați recursiunea este căutarea unui arbore binar.

Ce este recursiunea și cum o folosești?

Când datele sunt structurate într-un arbore binar, trebuie să mergeți pe multe căi pentru a căuta date. În fiecare punct al arborelui, trebuie să decideți dacă doriți să continuați să căutați în dreapta sau în stânga. Puteți salva ce parte a arborelui ați vizitat într-o variabilă, dar o funcție recursivă poate urmări în mod natural aceste informații.

Imaginează-ți că căutăm numărul șase din arborele de mai sus. Am putea face o funcție recursivă care caută arborele de la stânga la dreapta. Algoritmul ar arăta cam așa:

FUNCTION searchTree(branchToSearch) IF find 6 OR end of tree THEN RETURN result ELSE PROCESS branch CALL FUNCTION searchTree(left) CALL FUNCTION searchTree(right) END FUNCTION

În acest exemplu de pseudocod, algoritmul va căuta mai întâi partea stângă a arborelui. De fiecare dată când vizitează un număr nou, funcția este întreruptă și păstrată în memorie. Acest lucru ne permite să urmărim unde am fost.

Algoritmul va căuta întotdeauna în partea stângă cât poate mai întâi. odată ce ajunge la capătul arborelui, arborele de căutare (stânga) se va finaliza și va verifica partea dreaptă. Odată ce ambele părți sunt bifate, căutarea face backup pentru o ramură și continuă să verifice partea dreaptă.

Dacă algoritmii ar căuta în întregul arbore, ar face-o în ordinea:

2, 7, 2, 6, 5, 11, 5, 9 și 4

Vedeți dacă puteți urmări folosind pseudo-codul de mai sus.

Revizuirea recursiunii

Recursiunea este un subiect avansat. Va dura ceva timp pentru a înțelege și chiar mai mult pentru a deveni bun la codificare. Vă va ajuta dacă parcurgeți funcțiile recursive pas cu pas. S-ar putea chiar să vă ajute să stivuiți carduri index sau note post-it pe măsură ce parcurgeți o funcție când învățați să reprezentați fiecare apel de funcție.

Când scrieți o funcție recursivă, începeți prin a decide cum doriți să părăsiți funcția. Apoi, stabiliți cum să vă configurați bucla. Identificați ce informații trebuie trimise la următorul apel de funcție și ce trebuie returnate.

Cel mai bun mod de a învăța recursiunea este să o exersezi și să înveți din greșelile tale. Priviți o parte din vechiul cod și provocați-vă să rescrieți buclele ca funcții recursive. Probabil că nu vă va face codul mai eficient, dar va fi o practică bună.


Cum se calculează valoarea nCr

Cum se calculează valoarea nCr

Combinația este un concept matematic. Se referă la aranjarea mai multor obiecte în care ordinea lor este irelevantă. O formulă de bază descrie numărul de combinații valide.

Cum să scrieți și să compilați primul cod de soliditate

Cum să scrieți și să compilați primul cod de soliditate

Solidity este limbajul de programare folosit de contractele inteligente pe blockchain-ul Ethereum. Este un limbaj de programare tip static, orientat pe obiecte.

SQL vs. NoSQL: Care este cea mai bună bază de date pentru următorul tău proiect?

SQL vs. NoSQL: Care este cea mai bună bază de date pentru următorul tău proiect?

SQL vs. NoSQL: Care este cea mai bună bază de date pentru următorul tău proiect?

Cum să găsiți cuburi și pătrate perfecte cu N cifre folosind Python, C++ și JavaScript

Cum să găsiți cuburi și pătrate perfecte cu N cifre folosind Python, C++ și JavaScript

Mulți programatori iubesc să rezolve probleme matematice dificile folosind cod. Ajută la ascuțirea minții și la îmbunătățirea abilităților de rezolvare a problemelor. În acest articol, veți învăța cum să găsiți cele mai mici și mai mari pătrate și cuburi perfecte cu n cifre folosind Python, C++ și JavaScript. Fiecare exemplu conține, de asemenea, eșantion de ieșire pentru mai multe valori diferite.

Cum să utilizați Python ca calculator în linia de comandă

Cum să utilizați Python ca calculator în linia de comandă

În timp ce puteți utiliza un calculator grafic pe computer, interpretul limbajului de programare Python se poate dubla ca un calculator de birou. Este o glumă atât de populară în comunitatea Python, încât este menționată în tutorialul oficial. Iată cum puteți utiliza Python ca calculator.

Cum să încorporați tweet-uri în postările dvs. WordPress

Cum să încorporați tweet-uri în postările dvs. WordPress

Încorporarea serviciilor terță parte în postările dvs. WordPress este o modalitate interesantă de a captiva interesul vizitatorului. Conținutul încorporat oferă, de asemenea, indicii vizuale care facilitează scanarea. WordPress a simplificat adăugarea acestui tip de conținut.

Începeți cu Jupyter Notebook: Un tutorial

Începeți cu Jupyter Notebook: Un tutorial

Dacă sunteți un cercetător de date aspirant care lucrează cu Python sau R, trebuie să știți cum să utilizați Jupyter Notebook. Este un IDE open-source și bazat pe server pentru manipularea datelor, partajarea codului live, precum și gestionarea fluxului de lucru pentru știința datelor.

Codarea nu este pentru toată lumea: 9 joburi tehnologice pe care le puteți obține fără ea

Codarea nu este pentru toată lumea: 9 joburi tehnologice pe care le puteți obține fără ea

Tehnologia este, fără îndoială, industria viitorului. Dacă ești unul dintre milioanele de tineri adulți pe cale să se arunce în prima etapă a carierei tale, s-ar putea să te întrebi ce să faci dacă nu-ți place codificarea.

7 comenzi vitale pentru a începe cu Python pentru începători

7 comenzi vitale pentru a începe cu Python pentru începători

Învățarea unui nou limbaj de programare, cum ar fi Python, devine fără efort dacă aveți o foaie de parcurs cuprinzătoare care detaliază conceptele pe care să le învățați ca începător și cum să progresați mai departe pentru a atinge următoarea etapă. Chiar și programatorii intermediari ar trebui să își perfecționeze frecvent elementele de bază pentru a construi o bază solidă pentru ei înșiși.

Prima ta aplicație web ASP.NET: Cum să începeți

Prima ta aplicație web ASP.NET: Cum să începeți

ASP.NET este cadrul multiplatform gratuit al Microsoft pentru crearea de aplicații și servicii web. Platforma ASP.NET este o extensie a .NET, o platformă de dezvoltator de instrumente, limbaje de programare și biblioteci utilizate pentru a construi diferite aplicații.

Cele mai bune 9 alternative Docker pentru managementul containerelor

Cele mai bune 9 alternative Docker pentru managementul containerelor

Containerele sunt extrem de benefice pentru dezvoltarea, implementarea și gestionarea software-ului într-un mediu virtual. Docker este util în procesul de containerizare, dar nu este singura platformă din jur. Dacă sunteți în căutarea unor alternative la Docker, nu căutați mai departe. Această listă prezintă câteva alternative Docker eficiente și bogate în funcții de utilizat în următorul proiect.

Este ARCore sau ARKit mai bun pentru a crea experiențe de realitate augmentată?

Este ARCore sau ARKit mai bun pentru a crea experiențe de realitate augmentată?

Unele dintre cele mai discutate aplicații și experiențe mobile din zilele noastre utilizează tehnologia de realitate augmentată. În timp ce unele dintre aceste experiențe pot funcționa practic pe orice dispozitiv mobil, altele funcționează doar pe modele mai noi și mai scumpe. Dezvoltarea și utilizarea acestor experiențe mai robuste necesită ARCore și ARKit.

Cum se creează o nouă ramură în Git

Cum se creează o nouă ramură în Git

Ramurile sunt esențiale pentru conceptul de control al versiunilor în programare și Git în special. Acest articol de pornire vă spune ce este o ramură și cum să creați una folosind o serie de instrumente diferite.

Cum să utilizați instrucțiunea Python if

Cum să utilizați instrucțiunea Python if

Declarația if este forța motrice a programării logice. Ca rezultat, o mai bună înțelegere a Python-ului este un plus semnificativ la abilitățile dumneavoastră de programare Python.

Top 5 insigne care vă vor supraîncărca depozitul GitHub

Top 5 insigne care vă vor supraîncărca depozitul GitHub

Insignele GitHub pot spori lizibilitatea unui depozit, oferind utilizatorilor o modalitate rapidă de a captura valorile depozitului. Insignele pot fi încorporate în README.md pentru a clarifica importanța și necesitatea proiectului pentru alți dezvoltatori. Drept urmare, cititorii își fac o idee foarte rapidă despre depozit, verificând insignele atașate.

Noțiuni introductive cu Redis și PHP pentru stocarea rapidă a datelor

Noțiuni introductive cu Redis și PHP pentru stocarea rapidă a datelor

Popularul motor de stocare Redis este un instrument excelent și obligatoriu în orice arsenal de dezvoltatori de software. Motorul de stocare în memorie permite stocarea și recuperarea datelor extraordinar de rapide, până la 32 de milioane de interogări pe secundă, făcându-l o completare principală pentru orice motor major de baze de date.

Ce este WYSIWYG?

Ce este WYSIWYG?

O parte din magia dezvoltării software are loc atunci când liniile de cod alchimizează în mai mult decât suma părților lor. Veți descoperi că aveți nevoie de o anumită vizualizare creativă atunci când încercați să construiți abstract în acest fel. Acest lucru poate fi valabil pentru procesarea de text sau design web, la fel ca și pentru programare.

Cum se instalează .NET Framework versiunea 3.5 pe Windows 10

Cum se instalează .NET Framework versiunea 3.5 pe Windows 10

Ca utilizator de Windows, probabil că ați întâlnit cel puțin o dată cuvintele .NET Framework. Este un cadru software dezvoltat de Microsoft care vă permite să construiți și să rulați programe C#, C++, F# și Visual Basic. Cea mai recentă versiune .NET este 4.8, dar este posibil ca computerul să aibă nevoie de o versiune mai veche de .NET (cum ar fi .NET 3.5) pentru a rula unele aplicații.

WordPress vs. Wix: diferențele cheie

WordPress vs. Wix: diferențele cheie

Te confrunți adesea cu dilema clasică în timp ce construiești un site web pentru tine sau afacerea ta. WordPress vs. Wix — pe care să-l alegi și care ar fi cea mai bună alegere pentru tine?

Cele mai bune 10 distribuții Linux pentru dezvoltatori

Cele mai bune 10 distribuții Linux pentru dezvoltatori

În timp ce Linux ar putea să nu fie sistemul de operare preferat pentru utilizatorii ocazionali, este alegerea preferată pentru majoritatea dezvoltatorilor și programatorilor. Linux este un sistem de operare mai practic care a fost conceput în mod explicit ținând cont de programare și dezvoltatori.

Cum se calculează valoarea nCr

Cum se calculează valoarea nCr

Combinația este un concept matematic. Se referă la aranjarea mai multor obiecte în care ordinea lor este irelevantă. O formulă de bază descrie numărul de combinații valide.

Cum să scrieți și să compilați primul cod de soliditate

Cum să scrieți și să compilați primul cod de soliditate

Solidity este limbajul de programare folosit de contractele inteligente pe blockchain-ul Ethereum. Este un limbaj de programare tip static, orientat pe obiecte.

SQL vs. NoSQL: Care este cea mai bună bază de date pentru următorul tău proiect?

SQL vs. NoSQL: Care este cea mai bună bază de date pentru următorul tău proiect?

SQL vs. NoSQL: Care este cea mai bună bază de date pentru următorul tău proiect?

Cum să găsiți cuburi și pătrate perfecte cu N cifre folosind Python, C++ și JavaScript

Cum să găsiți cuburi și pătrate perfecte cu N cifre folosind Python, C++ și JavaScript

Mulți programatori iubesc să rezolve probleme matematice dificile folosind cod. Ajută la ascuțirea minții și la îmbunătățirea abilităților de rezolvare a problemelor. În acest articol, veți învăța cum să găsiți cele mai mici și mai mari pătrate și cuburi perfecte cu n cifre folosind Python, C++ și JavaScript. Fiecare exemplu conține, de asemenea, eșantion de ieșire pentru mai multe valori diferite.

Cum să utilizați Python ca calculator în linia de comandă

Cum să utilizați Python ca calculator în linia de comandă

În timp ce puteți utiliza un calculator grafic pe computer, interpretul limbajului de programare Python se poate dubla ca un calculator de birou. Este o glumă atât de populară în comunitatea Python, încât este menționată în tutorialul oficial. Iată cum puteți utiliza Python ca calculator.

Cum să încorporați tweet-uri în postările dvs. WordPress

Cum să încorporați tweet-uri în postările dvs. WordPress

Încorporarea serviciilor terță parte în postările dvs. WordPress este o modalitate interesantă de a captiva interesul vizitatorului. Conținutul încorporat oferă, de asemenea, indicii vizuale care facilitează scanarea. WordPress a simplificat adăugarea acestui tip de conținut.

Începeți cu Jupyter Notebook: Un tutorial

Începeți cu Jupyter Notebook: Un tutorial

Dacă sunteți un cercetător de date aspirant care lucrează cu Python sau R, trebuie să știți cum să utilizați Jupyter Notebook. Este un IDE open-source și bazat pe server pentru manipularea datelor, partajarea codului live, precum și gestionarea fluxului de lucru pentru știința datelor.

Codarea nu este pentru toată lumea: 9 joburi tehnologice pe care le puteți obține fără ea

Codarea nu este pentru toată lumea: 9 joburi tehnologice pe care le puteți obține fără ea

Tehnologia este, fără îndoială, industria viitorului. Dacă ești unul dintre milioanele de tineri adulți pe cale să se arunce în prima etapă a carierei tale, s-ar putea să te întrebi ce să faci dacă nu-ți place codificarea.

7 comenzi vitale pentru a începe cu Python pentru începători

7 comenzi vitale pentru a începe cu Python pentru începători

Învățarea unui nou limbaj de programare, cum ar fi Python, devine fără efort dacă aveți o foaie de parcurs cuprinzătoare care detaliază conceptele pe care să le învățați ca începător și cum să progresați mai departe pentru a atinge următoarea etapă. Chiar și programatorii intermediari ar trebui să își perfecționeze frecvent elementele de bază pentru a construi o bază solidă pentru ei înșiși.

Prima ta aplicație web ASP.NET: Cum să începeți

Prima ta aplicație web ASP.NET: Cum să începeți

ASP.NET este cadrul multiplatform gratuit al Microsoft pentru crearea de aplicații și servicii web. Platforma ASP.NET este o extensie a .NET, o platformă de dezvoltator de instrumente, limbaje de programare și biblioteci utilizate pentru a construi diferite aplicații.