Razlika između rekurzije i iteracije

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 4 Svibanj 2024
Anonim
PR I Programska stuktura iteracija
Video: PR I Programska stuktura iteracija

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.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon

Osnove za usporedburekurzijeponavljanje
Osnovni, temeljniIzjava u tijelu funkcije naziva samu funkciju.Omogućuje ponovljeno izvršavanje skupa uputa.
FormatU 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šetakU 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.
StanjeAko 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 ponavljanjeBeskonačna rekurzija može srušiti sustav.Beskonačna petlja koristi CPU cikluse više puta.
primijenjenZa funkcije se uvijek primjenjuje rekurzija.Iteracija se primjenjuje na iteracijske izjave ili "petlje".
StogSloga se koristi za spremanje skupa novih lokalnih varijabli i parametara svaki put kada se funkcija poziva.Ne koristi stog.
goreRekurzija ima glavninu ponovljenih poziva funkcija.Nema pretjeranog ponovljenog poziva funkcije.
UbrzatiSporo u izvršenju.Brzo izvršenje.
Veličina kodaRekurzija 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.

  1. Rekurzija je kada se metoda u programu opetovano poziva, a iteracija je kad se niz instrukcija u programu opetovano izvršava.
  2. 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.
  3. Uvjetna izjava odlučuje o prestanku vrijednosti rekurzije, a vrijednost kontrolne varijable odlučuje o prestanku izjave o ponavljanju.
  4. 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.
  5. Beskonačna rekurzija može dovesti do pada sustava dok, beskonačna iteracija troši CPU cikluse.
  6. Za metodu se uvijek primjenjuje rekurzija dok se za skup podučavanja primjenjuje iteracija.
  7. Varijable stvorene tijekom rekurzije spremaju se u stog, dok iteracija ne zahtijeva snop.
  8. Rekurzija uzrokuje pretjerano ponavljanje poziva funkcije dok, iteracija nema funkciju koja zove nad glavom.
  9. Zbog poziva funkcije nad glavom izvršenje rekurzije je sporije, dok je izvršavanje iteracije brže.
  10. 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.