Ero rekursion ja toiston välillä

Avainero - rekursio vs. toisto
 

Rekursiota ja toistoa voidaan käyttää ohjelmointiongelmien ratkaisemiseen. Lähestymistapa ongelman ratkaisemiseen rekursiota tai iteraatiota käyttäen riippuu ongelman ratkaisutavasta. avainero rekursion ja iteraation välillä on se rekursio on mekanismi kutsua samaan funktioon kuuluvaa toimintoa samalla, kun toisto on suorittaa joukko käskyjä toistuvasti, kunnes annettu ehto on totta. Rekursiointi ja toisto ovat tärkeitä tekniikoita algoritmien kehittämiseen ja ohjelmistosovellusten rakentamiseen.

SISÄLLYS

1. Yleiskatsaus ja keskeiset erot
2. Mikä on rekursio
3. Mikä on toisto
4. Rekursion ja toistumisen väliset yhtäläisyydet
5. Vertailu rinnakkain - rekursio vs. iteraatio taulukkomuodossa
6. Yhteenveto

Mikä on rekursio?

Kun toiminto kutsuu itseään toiminnon sisällä, se tunnetaan nimellä rekursio. Rekursiota on kahta tyyppiä. Ne ovat äärellinen rekursio ja ääretön toisto. Äärellinen rekursio on päättyvä ehto. Ääretön rekursio ei ole päättävää ehtoa.

Rekursio voidaan selittää ohjelman avulla kertoimien laskemiseksi.

n! = n * (n-1)!, jos n> 0

n! = 1, jos n = 0;

Katso paljekoodi laskemalla kerroin 3 (3! = 3 * 2 * 1).

intmain ()

int arvo = tekijä (3);

printf (“Faktoriarvo on% d \ n”, arvo);

paluu 0;

intfaktoriaalinen (intn)

if (n == 0)

paluu 1;

muuten

paluu n * tekijä (n-1);

Kun kutsutaan faktoriaaliin (3), tämä toiminto kutsuu factorialiin (2). Kun kutsutaan faktoriaaliin (2), tämä toiminto kutsuu factorialiin (1). Sitten tekijä (1) kutsuu tekijäksi (0). kerroin (0) palaa 1. Yllä olevassa ohjelmassa n == 0 ehto ”if block” on perusedellytys. Samoin tekijäfunktiota kutsutaan uudestaan ​​ja uudestaan.

Rekursiiviset toiminnot liittyvät pinoon. C: ssä pääohjelmalla voi olla monia toimintoja. Joten main () on kutsuva funktio, ja toiminto, jota pääohjelma kutsuu, on kutsuttu funktio. Kun toiminto kutsutaan, ohjaus annetaan kutsutulle toiminnolle. Kun toiminnon suorittaminen on suoritettu loppuun, ohjaus palautetaan pääkäyttöön. Sitten pääohjelma jatkuu. Joten se luo aktivointitietueen tai pinokehyksen suorituksen jatkamiseksi.

Kuva 01: Rekursio

Yllä olevassa ohjelmassa, kun kutsutaan faktoriaaliin (3) päästä, se luo aktivointitietueen puhelupinoon. Sitten pino päälle luodaan tekijä (2) pinokehys ja niin edelleen. Aktivointitietue pitää tietoja paikallisista muuttujista jne. Joka kerta kun toiminto kutsutaan, pino päälle luodaan uusi joukko paikallisia muuttujia. Nämä pinokehykset voivat hidastaa nopeutta. Samoin rekursioissa funktio kutsuu itseään. Rekursiivisen funktion ajan monimutkaisuus saadaan monta kertaa, funktiota kutsutaan. Yhden funktion puhelun ajan monimutkaisuus on O (1). N: lle rekursiivisten puhelujen määrälle kompleksisuus on O (n).

Mikä on toisto?

Iteraatio on käskylohko, joka toistuu uudestaan ​​ja uudestaan, kunnes annettu tila on tosi. Iteraatio voidaan suorittaa käyttämällä "silmukkaa", "tekemisen silmukkaa" tai "samalla silmukkaa". ”For loop” -sintaksi on seuraava.

varten (alustus; ehto; muokata)

// lausunnot;

Kuva 02: ”silmukkakaaviona”

Alustusvaihe suoritetaan ensin. Tämä vaihe on ilmoittaa ja alustaa silmukan ohjausmuuttujat. Jos ehto on totta, kiharanauhojen sisällä olevat lauseet suoritetaan. Nämä lausunnot toteutuvat, kunnes ehto on totta. Jos ehto on väärä, ohjaus siirtyy seuraavaan lauseeseen ”silmukan” jälkeen. Suoritettuaan lauseet silmukan sisällä, ohjaus siirtyy osioon. Se on päivittää silmukanhallintamuuttuja. Sitten kunto tarkistetaan uudelleen. Jos ehto on totta, kiharanauhojen sisällä olevat lauseet toteutetaan. Tällä tavalla "silmukka" toistuu.

Kohdassa ”loop”, silmukan sisällä olevat lauseet suoritetaan, kunnes ehto on totta.

kun taas (ehto)

// lausunnot

Tehtävä-silmukassa, kunto tarkistetaan silmukan lopussa. Joten, silmukka suorittaa ainakin kerran.

tehdä

// lausunnot

while (ehto)

Ohjelma kertoimen 3 (3!) Löytämiseksi iteraation avulla (“silmukalle”) on seuraava.

int main ()

intn = 3, tekijä = 1;

inti;

varten (i = 1; i<=n ; i++)

factorial = factorial * i;

printf (”Faktoriarvo on% d \ n”, factorial);

paluu 0;

Mitkä ovat rekursion ja toistumisen väliset yhtäläisyydet?

  • Molemmat ovat tekniikoita ongelman ratkaisemiseksi.
  • Tehtävä voidaan ratkaista joko rekursiolla tai iteraatiolla.

Mitä eroa rekursion ja toistumisen välillä on??

Rekursio vs. toisto

Rekursio on menetelmä saman toiminnon kutsumiseksi. Iteraatio on käskylohko, joka toistuu, kunnes annettu ehto on totta.
Avaruuden monimutkaisuus
Rekursiivisten ohjelmien tilan monimutkaisuus on korkeampi kuin iteraatiot. Avaruuden monimutkaisuus on alhaisempi iteraatioissa.
Nopeus
Rekursion suorittaminen on hidasta. Normaalisti iteraatio on nopeampaa kuin rekursio.
Kunto
Jos lopetusolosuhteita ei ole, toistuvuus voi olla ääretön. Jos tila ei koskaan muutu vääriksi, se on ääretön toisto.
Pino
Rekursiolla pinoa käytetään paikallisten muuttujien tallentamiseen, kun funktiota kutsutaan. Toistossa pinoa ei käytetä.
Koodin luettavuus
Rekursiivinen ohjelma on luettavampi. Iteratiivinen ohjelma on vaikeampi lukea kuin rekursiivinen ohjelma.

Yhteenveto - Rekursio vs. toisto

Tässä artikkelissa käsiteltiin rekursion ja iteraation eroa. Molempia voidaan ratkaista ohjelmointiongelmien ratkaisemiseksi. Ero rekursion ja iteraation välillä on se, että rekursio on mekanismi kutsua toiminto samaan funktioon ja toistamaan se suorittamaan joukko käskyjä toistuvasti, kunnes annettu ehto on totta. Jos ongelma voidaan ratkaista rekursiivisessa muodossa, se voidaan ratkaista myös käyttämällä iteraatioita.

Lataa PDF-versio Rekursio vs.

Voit ladata tämän artikkelin PDF-version ja käyttää sitä offline-tarkoituksiin lainaushuomautuksen mukaisesti. Lataa PDF-versio täältä Rekursion ja iteraation välinen ero

Viite:

1.Piste, oppaat. ”Tietorakenteet ja algoritmien rekursion perusteet.”, Opetusohjelmat, 15. elokuuta 2017. Saatavana täältä 
2.nareshtechnologies. “Rekursio C-funktioissa | C-kielen opastus ”YouTube, YouTube, 12. syyskuuta 2016. Saatavilla täältä  
3.yusuf shakeel. ”Rekursioalgoritmi | Factorial - askel askeleelta -opas ”YouTube, YouTube, 14. lokakuuta 2013. Saatavilla täältä  

Kuvan kohteliaisuus:

1.'CPT-Rekursio-tekijäkoodi'By Pluke - Oma työ, (Public Domain) Commons Wikimedia -sivuston kautta 
2.'Silmukkakaavio'Ei mitään koneellisesti luettavaa kirjoittajaa toimittanut - oma työ oletetaan. (CC BY-SA 2.5) Commons Wikimedian kautta