Suositeltava, 2024

Toimituksen Valinta

Rekursion ja iteroinnin välinen ero

Rekursio ja iterointi suorittavat toistuvasti ohjeet. Rekursio on silloin, kun toiminnon lausunto kutsuu itseään toistuvasti. Iterointi on silloin, kun silmukka suorittaa toistuvasti, kunnes ohjaustila muuttuu vääräksi. Ensisijainen ero rekursioiden ja iteroinnin välillä on se, että rekursio on prosessi, jota sovelletaan aina funktioon. Iteraatiota sovelletaan ohjeiden sarjaan, jonka haluamme suorittaa toistuvasti.

Vertailukaavio

Vertailun perusterekursioiteraatio
perustiedotToiminnossa oleva lausunto kutsuu itse toimintoa.Mahdollistaa ohjeiden sarjan toistuvan suorittamisen.
MuotoRekursiivisessa toiminnossa on määritetty vain lopetustila (peruskotelo).Iteraatio sisältää alustuksen, kunnon, lausekkeen toteutuksen silmukassa ja päivityksen (lisäykset ja vähennykset) säätösuureen.
päättyminenEhdollinen lauseke sisältyy funktion runkoon pakottaakseen toiminnon palaamaan ilman rekursiokutsua.Iterointilausunto suoritetaan toistuvasti, kunnes tietty ehto saavutetaan.
KuntoJos toiminto ei lähene johonkin nimettyyn tilaan (peruskotelo), se johtaa äärettömään rekursioon.Jos ohjaustila iterointilausunnossa ei koskaan tule vääräksi, se johtaa äärettömään iteraatioon.
Ääretön toistaminenÄäretön rekursio voi kaataa järjestelmän.Ääretön silmukka käyttää CPU-syklejä toistuvasti.
soveltavaRekursiota sovelletaan aina toimintoihin.Iterointia sovelletaan iterointilausekkeisiin tai "silmukoihin".
PinoPinoa käytetään uusien paikallisten muuttujien ja parametrien tallentamiseen aina, kun toimintoa kutsutaan.Ei käytä pinota.
yläpuolellaRekursiolla on toistuvat toiminnot.Ei toistuvia toimintoja.
NopeusHidas toteutus.Nopea toteutus.
Koodin kokoRekursio vähentää koodin kokoa.Iterointi tekee koodista pidemmän.

Recursionin määritelmä

C ++ sallii toiminnon kutsua itseään koodinsa sisällä. Tämä tarkoittaa, että funktion määrityksellä on itsenäinen puhelu. Joskus sitä kutsutaan myös " pyöreäksi määritelmäksi ". Toiminnon käyttämät paikalliset muuttujat ja parametrit luodaan aina joka kerta, kun toiminto kutsuu itseään ja tallennetaan pinon yläosaan. Mutta joka kerta, kun toiminto kutsuu itseään, se ei luo uutta kopiota tästä toiminnosta. Rekursiivinen funktio ei vähennä merkittävästi koodin kokoa eikä edes parantaa muistin käyttöä, mutta se tapahtuu jonkin verran verrattuna iterointiin.

Rekursion lopettamiseksi sinun on sisällytettävä funktion määritykseen valintavaihtoehto, joka pakottaa toiminnon palaamaan antamatta rekursiivista puhelua itselleen. Valinta-ilmoituksen puuttuminen rekursiivisen funktion määritelmässä antaa toiminnon rajattomalle rekursiolle kerran kutsuttaessa.

Ymmärtäkäämme rekursiota toiminnolla, joka palauttaa numeron tekijän.

 int faktori (int num) {int answer; jos (num == 1) {paluu 1; } else {answer = faktori (num-1) * num; // rekursiivinen soitto} paluu (vastaus); } 

Yllä olevassa koodissa lauseke muussa osassa näyttää rekursiota, koska lausunto kutsuu funktionaalista (), jossa se sijaitsee.

Määrittäminen

Iterointi on prosessi, jossa suoritetaan ohjeiden sarja toistuvasti, kunnes ehto iterointilausunnossa muuttuu vääräksi. Iterointilausunto sisältää iterointilausuman sisällä olevien lausuntojen alustamisen, vertailun, suorittamisen ja lopuksi ohjausmuuttujan päivityksen. Kun säätömuuttuja on päivitetty, sitä verrataan uudelleen, ja prosessi toistaa itsensä, kunnes iterointilausuman ehto osoittautuu vääräksi. Iterointilausekkeet ovat "silmukalle", "silmukalle", "do-time" -silmukalle.

Iterointilauseke ei käytä pinoa muuttujien tallentamiseen. Näin ollen iterointilausekkeen toteutus on nopeampi verrattuna rekursiiviseen toimintoon. Jopa iterointitoiminnolla ei ole toistuvan toiminnon kutsua, joka myös tekee sen suorittamisesta nopeammin kuin rekursiivinen toiminto. Iterointi lopetetaan, kun ohjaustila muuttuu vääräksi. Ohjausolosuhteiden puuttuminen iterointilausekkeessa voi johtaa äärettömään silmukkaan tai se voi aiheuttaa kompilointivirheen.

Ymmärrämme iteroinnin edellä olevan esimerkin osalta.

 int faktori (int num) {int answer = 1; // tarvitsee alustuksen, koska se voi sisältää roska-arvon ennen sen alustusta (int t = 1; t> num; t ++) // iterointi {answer = vastaus * (t); paluu (vastaus); }} 

Yllä olevassa koodissa funktio palauttaa numeron tekijä iteraatiotodistuksen avulla.

Rekursion ja iteroinnin keskeiset erot

  1. Rekursio on silloin, kun ohjelmassa oleva menetelmä kutsuu toistuvasti itseään, kun taas iterointi on silloin, kun ohjelman joukko ohjeita suoritetaan toistuvasti.
  2. Rekursiivinen menetelmä sisältää ohjeiden joukon, lausunnon kutsuvan itseään ja lopetustilan, kun taas iterointilausekkeet sisältävät alustuksen, lisäyksen, kunnon, käskyn joukon silmukassa ja ohjausmuuttujan.
  3. Ehdollinen lausunto päättää rekursio- ja säätömuuttujan arvon päättämisestä päättää iterointilausunnon päättymisen.
  4. Jos menetelmä ei johda päättymisolosuhteeseen, se siirtyy äärettömään rekursioon. Toisaalta, jos ohjausmuuttuja ei koskaan johda päättymisarvoon, iteraatiodirektiivi iteroi loputtomasti.
  5. Ääretön rekursio voi johtaa järjestelmän kaatumiseen, kun taas ääretön iterointi kuluttaa CPU-syklejä.
  6. Rekursiota sovelletaan aina menetelmään, kun taas iteraatiota sovelletaan käskykokonaisuuteen.
  7. Rekursiossa luodut muuttujat tallennetaan pinoon, kun taas iterointi ei vaadi pinota.
  8. Rekursio aiheuttaa toistuvan toiminnon kutsuvan yläpuolen, kun taas iteroinnissa ei ole funktiota, joka kutsuu yläpuolta.
  9. Toiminnon kutsumisen vuoksi rekursioiden ylimääräinen toteutus on hitaampaa, kun taas iteroinnin suorittaminen on nopeampaa.
  10. Rekursio vähentää koodin kokoa, kun taas iteraatiot tekevät koodista pidemmän.

johtopäätös:

Rekursiivinen toiminto on helppo kirjoittaa, mutta ne eivät toimi hyvin verrattuna iteraatioon, kun taas iterointia on vaikea kirjoittaa, mutta niiden suorituskyky on hyvä verrattuna rekursioon.

Top