Razlika između rekurzije i iteracije
Sadržaj
Rekurzija i iteracija oboje opetovano izvršavaju skup uputa. Rekurzija je kada se neki izraz u funkciji ponavlja. Iteracija je kada se petlja opetovano izvršava dok upravljački uvjet ne postane lažan. Primarna razlika između rekurzije i iteracije je ta rekurzija je proces, uvijek primijenjen na funkciju. ponavljanje se primjenjuje na skup uputa koje želimo opetovano izvoditi.
- Usporedni grafikon
- definicija
- Ključne razlike
- Zaključak
Usporedni grafikon
Osnove za usporedbu | rekurzije | ponavljanje |
---|---|---|
Osnovni, temeljni | Izjava u tijelu funkcije naziva samu funkciju. | Omogućuje ponovljeno izvršavanje skupa uputa. |
Format | U rekurzivnoj funkciji specificiran je samo uvjet prekida (osnovni slučaj). | Iteracija uključuje inicijalizaciju, stanje, izvršavanje izjave unutar petlje i ažuriranje (prirasta i smanjenja) kontrolne varijable. |
završetak | U uvjetno stanje uključena je tjelesna funkcija da bi se funkcija vratila bez rekurzijskog poziva. | Izjava o iteraciji opetovano se izvršava sve dok se ne postigne određeni uvjet. |
Stanje | Ako se funkcija ne konvergira u neko stanje zvano (osnovni slučaj), to vodi u beskonačnu rekurziju. | Ako uvjet kontrole u iteracijskoj izjavi nikad ne postane lažan, vodi do beskonačne iteracije. |
Beskonačno ponavljanje | Beskonačna rekurzija može srušiti sustav. | Beskonačna petlja koristi CPU cikluse više puta. |
primijenjen | Za funkcije se uvijek primjenjuje rekurzija. | Iteracija se primjenjuje na iteracijske izjave ili "petlje". |
Stog | Sloga se koristi za spremanje skupa novih lokalnih varijabli i parametara svaki put kada se funkcija poziva. | Ne koristi stog. |
gore | Rekurzija ima glavninu ponovljenih poziva funkcija. | Nema pretjeranog ponovljenog poziva funkcije. |
Ubrzati | Sporo u izvršenju. | Brzo izvršenje. |
Veličina koda | Rekurzija smanjuje veličinu koda. | Iteracijom se kod produžuje. |
Definicija rekurzije
C ++ omogućava funkciji da se sama poziva unutar svog koda. To znači da definicija funkcije posjeduje poziv funkcije prema sebi. Ponekad se naziva i „kružna definicija„. Skup lokalnih varijabli i parametara koje koristi funkcija novonastalo su stvoreni svaki put kada se funkcija zove i pohranjuju se na vrhu snopa. Ali, svaki put kada se funkcija sama zove, ne stvara novu kopiju te funkcije. Rekurzivna funkcija ne smanjuje značajno veličinu koda i čak ne poboljšava iskorištenje memorije, ali ima neke u usporedbi s iteracijom.
Da biste prekinuli rekurziju, morate uključiti odabranu izjavu u definiciji funkcije kako biste prisilili funkciju na povratak bez davanja rekurzivnog poziva sebi. Nepostojanje izjave select u definiciji rekurzivne funkcije pustit će funkciju u beskonačnu rekurziju jednom pozvanom.
Shvatimo li rekurziju s funkcijom koja će vratiti faktor iz broja.
int factorial (int num) {int odgovor; ako (num == 1) {povratak 1; } else {answer = faktorski (num-1) * num; // rekurzivni poziv} povratak (odgovor); }
U gornjem kôdu, izjava u drugom dijelu pokazuje rekurziju, jer izjava naziva faktor faktor () u kojem se nalazi.
Definicija iteracije
Iteracija je postupak izvođenja niza uputa više puta dok uvjet u iteracijskoj izjavi ne postane lažan. Izjava za iteraciju uključuje inicijalizaciju, usporedbu, izvršavanje izraza unutar iteracijske izjave i konačno ažuriranje kontrolne varijable. Nakon ažuriranja kontrolne varijable on se uspoređuje ponovo i proces se ponavlja dok se stanje u izjavi iteracije ne pokaže lažnim. Iskazi iteracije su petlja "za", petlja "dok", petlja "do-dok".
Izjava iteracije ne koristi stog za pohranu varijabli. Dakle, izvršavanje iteracijske izjave je brže u usporedbi s rekurzivnom funkcijom. Čak i funkcija iteracije nema nadoknadu ponovljenog poziva funkcije, koji također čini njeno izvršavanje bržim od rekurzivne funkcije. Iteracija se prekida kada uvjet kontrole postane lažan. Nepostojanje uvjeta kontrole u iteracijskoj izjavi može rezultirati beskonačnom petljom ili uzrokovati pogrešku u sastavljanju.
Shvatimo u ponovljenom primjeru.
int factorial (int broj) {int odgovor = 1; // treba inicijalizaciju jer može sadržavati vrijednost smeća prije inicijalizacije za (int t = 1; t> num; t ++) // iteracija {answer = odgovor * (t); povratak (odgovor); }}
U gornjem kôdu, funkcija vraća faktor iz broja pomoću izraza iteracije.
- Rekurzija je kada se metoda u programu opetovano poziva, a iteracija je kad se niz instrukcija u programu opetovano izvršava.
- Rekurzivna metoda sadrži skup upute, pozivanje izjave i uvjet prekida, dok iteracijske izjave sadrže inicijalizaciju, priraštaj, stanje, skup uputstava unutar petlje i kontrolnu varijablu.
- Uvjetna izjava odlučuje o prestanku vrijednosti rekurzije, a vrijednost kontrolne varijable odlučuje o prestanku izjave o ponavljanju.
- Ako metoda ne dovede do stanja raskida, ulazi u beskonačnu rekurziju. S druge strane, ako kontrolna varijabla nikada ne dovede do zaključne vrijednosti, izjava iteracije ponavlja se beskonačno.
- Beskonačna rekurzija može dovesti do pada sustava dok, beskonačna iteracija troši CPU cikluse.
- Za metodu se uvijek primjenjuje rekurzija dok se za skup podučavanja primjenjuje iteracija.
- Varijable stvorene tijekom rekurzije spremaju se u stog, dok iteracija ne zahtijeva snop.
- Rekurzija uzrokuje pretjerano ponavljanje poziva funkcije dok, iteracija nema funkciju koja zove nad glavom.
- Zbog poziva funkcije nad glavom izvršenje rekurzije je sporije, dok je izvršavanje iteracije brže.
- Rekurzija smanjuje veličinu koda dok, iteracije produžuju kôd.
Zaključak:
Rekurzivnu funkciju je lako napisati, ali ne djeluju dobro u usporedbi s iteracijom, dok je iteracija teško napisati, ali njihova je izvedba dobra u usporedbi s rekurzijom.