Recursiune în structura datelor: cum funcționează, tipuri și când este utilizată

Publicat: 2020-05-22

Să începem cu definiția recursiunii în structura de date. Mai târziu vom discuta despre diferitele tipuri de recursivitate și despre modul în care recursiunea este utilizată pentru a rezolva diferite probleme.

Cuprins

Ce este recursiunea?

Cu cuvinte simple, recursiunea este o rezolvare a problemelor și, în unele cazuri, o tehnică de programare care are o proprietate foarte specială și exclusivă. În recursivitate, o funcție sau o metodă are capacitatea de a se apela pentru a rezolva problema. Procesul recursiunii implică rezolvarea unei probleme prin transformarea ei în varietăți mai mici ale ei.

Procesul în care o funcție se autoapelează poate avea loc atât direct, cât și indirect. Această diferență de apel dă naștere la diferite tipuri de recursivitate, despre care vom vorbi puțin mai târziu. Unele dintre problemele care pot fi rezolvate folosind recursiunea includ DFS of Graph, Towers of Hanoi, Different Types of Tree Traversas și altele. Pentru a afla despre recursivitate și alte concepte de știință a datelor, consultați cursurile online de știință a datelor IIIT-B.

Citiți: 13 idei interesante de proiecte de structură a datelor

Cum funcționează recursiunea?

Conceptul de recursivitate se stabileste pe ideea ca o problema poate fi rezolvata mult mai usor si in timp mai mic daca este reprezentata intr-una sau mai mici versiuni. Adăugarea de condiții de bază pentru a opri recursiunea este o altă parte importantă a utilizării acestui algoritm pentru a rezolva o problemă.

Nu este necesară experiență de codare. Suport în carieră la 360°. Diploma PG în Machine Learning și AI de la IIIT-B și upGrad.

Oamenii cred adesea că nu este posibil să se definească o entitate în termenii ei înșiși. Recursiunea dovedește că teoria este greșită. Și dacă această tehnică este efectuată în mod corect, ar putea da rezultate foarte puternice. Să vedem cum funcționează recursiunea cu câteva exemple. Ce este o propoziție? Poate fi definit ca două sau mai multe propoziții unite împreună cu ajutorul conjuncției. În mod similar, un folder ar putea fi un dispozitiv de stocare care este utilizat pentru a stoca fișiere și foldere. Un strămoș ar putea fi părintele unuia și un strămoș al altui membru al familiei din arborele genealogic.

Recursiunea ajută la definirea situațiilor complexe folosind câteva cuvinte foarte simple. Cum ai defini de obicei un strămoș? Un părinte, un bunic sau un străbunic. Acest lucru ar putea continua. În mod similar, definirea unui folder ar putea fi o sarcină grea. Ar putea fi orice care deține unele fișiere și foldere care ar putea fi fișiere și foldere în sine, iar acest lucru ar putea continua. Acesta este motivul pentru care recursiunea face definirea situațiilor mult mai ușoară decât de obicei.

Recursiunea este, de asemenea, o tehnică de programare suficient de bună. O subrutină recursivă este definită ca una care se autoinvocă direct sau indirect. Apelarea unui subprogram direct înseamnă că definiția subrutinei are deja instrucțiunea de apelare a subrutinei care a fost definită.

Pe de altă parte, apelarea indirectă a unei subrutine are loc atunci când o subrutină apelează o altă subrutină, care apoi apelează subrutina originală. Recursiunea poate folosi câteva linii de cod pentru a descrie o sarcină foarte complexă. Să ne îndreptăm acum atenția asupra diferitelor tipuri de recursivitate pe care le-am atins deja.

Citește și: Top 6 limbaje de programare de învățat

Tipuri de recursivitate

Există doar două tipuri de recursivitate, așa cum sa menționat deja. Să vedem cum sunt diferite unul de celălalt. Recursiunea directă este modalitatea mai simplă, deoarece implică doar un singur pas de apelare a funcției sau metodei sau subrutinei originale. Pe de altă parte, recursiunea indirectă implică mai multe etape.

Primul apel este efectuat de metoda originală către o a doua metodă, care la rândul său apelează metoda originală. Acest lanț de apeluri poate prezenta o serie de metode sau funcții. Cu cuvinte simple, putem spune că există întotdeauna o variație în profunzimea recursiunii indirecte, iar această variație în profunzime depinde de numărul de metode implicate în proces.

Recursiunea directă poate fi folosită pentru a apela doar o singură funcție. Pe de altă parte, recursiunea indirectă poate fi folosită pentru a apela mai multe metode sau funcții cu ajutorul altor funcții și, de asemenea, de mai multe ori. Recursiunea indirectă nu face overhead în timp ce omologul său direct o face.

Când se folosește recursiunea?

Există situații în care puteți folosi recursiunea sau iterația. Cu toate acestea, ar trebui să alegeți întotdeauna o soluție care pare a fi cea mai potrivită pentru o problemă. O recursivitate este întotdeauna o opțiune potrivită atunci când vine vorba de abstractizarea datelor. Oamenii folosesc adesea definiții recursive pentru a defini datele și operațiunile conexe.

Și nu va fi greșit să spunem că recursiunea este în mare parte soluția naturală pentru problemele asociate cu implementarea diferitelor operațiuni asupra datelor. Cu toate acestea, există anumite lucruri legate de recursivitate care ar putea să nu o facă cea mai bună soluție pentru fiecare problemă. În aceste situații, o alternativă precum metoda iterativă este cea mai potrivită.

Implementarea recursiunii folosește mult spațiu de stivă, ceea ce poate duce adesea la redundanță. De fiecare dată când folosim recursiunea, numim o metodă care are ca rezultat crearea unei noi instanțe a acelei metode. Această nouă instanță poartă diferiți parametri și variabile, care sunt stocate pe stivă și sunt preluate la returnare. Deci, deși recursiunea este soluția mai simplă decât altele, de obicei nu este cea mai practică.

De asemenea, nu avem un set de reguli predefinite care pot ajuta la alegerea iterației sau recursiunii pentru diferite probleme. Cel mai mare beneficiu al utilizării recursiunii este că este o metodă concisă. Acest lucru face ca citirea și întreținerea acesteia să fie mai ușoare decât de obicei. Dar metodele recursive nu sunt cele mai eficiente metode disponibile pentru noi, deoarece ocupă mult spațiu de stocare și consumă mult timp în timpul implementării.

Ținând cont de câteva lucruri, vă poate ajuta să decideți dacă alegerea unei recursiuni pentru o problemă este calea corectă sau nu. Ar trebui să alegeți recursiunea dacă problema pe care urmează să o rezolvați este menționată în termeni recursivi și soluția recursivă pare mai puțin complexă.

Ar trebui să știți că recursiunea, în cele mai multe cazuri, simplifică implementarea algoritmilor pe care doriți să-i folosiți. Acum, dacă complexitățile asociate cu utilizarea iterației și recursiunii sunt aceleași pentru o anumită problemă, ar trebui să mergeți cu iterație, deoarece șansele ca aceasta să fie mai eficientă sunt mai mari.

Consultați și: 23 de cele mai bune cursuri de programare a computerelor pentru a obține un loc de muncă

Concluzie

Cu toate acestea, ar putea exista situații în care luarea unei decizii poate să nu fie atât de ușoară. Trebuie să alegeți între eficiență și simplitate. Dacă sunteți un designer cu experiență, ați ști exact când să acordați mai multă importanță eficienței și atunci când alegeți simplitatea sau concizia în detrimentul acesteia este calea de urmat.

Dacă sunteți curios să aflați despre structura datelor, știința datelor, consultați Programul Executive 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 industrie experți, 1-la-1 cu mentori din industrie, peste 400 de ore de învățare și asistență la locul de muncă cu firme de top.

Care este cea mai comună aplicație din viața reală a recursiunii?

Recursiunea este un proces în care funcția se autoinvocă indirect sau direct pentru a rezolva problema. Funcția care realizează procesul recursiv se numește funcție recursivă. Există anumite probleme care pot fi rezolvate destul de ușor cu ajutorul unui algoritm recursiv.

Cea mai comună aplicație din viața reală a recursiunii este atunci când calculați câți bani aveți într-o cutie plină cu Rs. 100 de note. Dacă sunt prea multe note, atunci s-ar putea să-i ceri prietenului tău să facă aceeași muncă, împărțind întregul teanc în două. După ce amândoi ați terminat de numărat, veți doar aduna ambele rezultate pentru a obține suma totală.

Care sunt proprietățile pe care trebuie să le aibă o funcție recursivă?

O funcție recursivă are capacitatea de a continua ca o buclă infinită. Există două proprietăți care trebuie definite pentru orice funcție recursivă pentru a preveni intrarea într-o buclă infinită. Sunt:

1. Criterii de bază – Trebuie să existe o condiție de bază predefinită. Ori de câte ori acest criteriu de bază este îndeplinit, funcția va înceta să se mai apeleze.
2. Abordare progresivă – Apelurile recursive ar trebui să constea într-o abordare progresivă. Ori de câte ori este efectuat un apel recursiv către funcție, acesta ar trebui să ajungă aproape de condiția de bază.

Care sunt avantajele și dezavantajele recursiunii?

Unele dintre avantajele recursiunii sunt că trebuie doar să definiți condiția de bază și cazul recursiv într-o funcție recursivă. Acest lucru face codul destul de simplu și scurt în comparație cu un cod iterativ, iar unele probleme precum Tree Traversal și Graph sunt în mod inerent recursive.

Cele mai mari dezavantaje ale recursiunii sunt că există cerințe mai mari de spațiu pentru funcțiile recursive în comparație cu un program iterativ, deoarece fiecare apel de funcție trebuie să rămână în stivă până când condiția de bază este îndeplinită și există și cerințe mai mari de timp, deoarece stiva. crește după fiecare apel de funcție, iar răspunsul final poate fi returnat numai după scoaterea tuturor elementelor din stivă.