Johdatus rekursiiviseen toimintaan C: ssä

Prosessia, jossa toistetaan esineet samalla tavalla kuin se oli ennen, kutsutaan rekursioksi. Funktion sanotaan olevan rekursiivinen, jos sitä kutsutaan itsessään. Rekursiota tukee ohjelmointikieli C. Alla on kaksi ehtoa, jotka ovat kriittisiä rekursion toteuttamiseksi C: ssä:

  • Poistumisolosuhteet: Tämä ehto auttaa toimintoa tunnistamaan, milloin poistuu toiminnosta. Jos emme määrittele poistumisehtoa, koodi tulee äärettömään silmukkaan.
  • Laskurin vaihtaminen : Laskurin vaihtaminen jokaisesta puhelusta tähän toimintoon.

Tällä tavoin voimme toteuttaa rekursiivisen funktion C-ohjelmointikielellä. Nämä toiminnot ovat hyödyllisiä ratkaista rahamatemaattisia ongelmia, jotka vaativat samanlaisen prosessin kutsumisen useita kertoja. Esimerkkejä sellaisista ongelmista on useiden Fibonacci-sarjojen sukupolven tekijän laskeminen.

Syntaksi:

int fun(a1)
(
If(base_condition) return val;
fun(a2);
)

Kuinka rekursiivinen toiminto toimii C: ssä?

Rekursiiviset toiminnot ovat tapa toteuttaa yhtälö C-ohjelmointikielellä. Rekursiiviseen funktioon kutsutaan argumentti, joka välitetään siihen sanoen n, pinoon varattu muisti allokoidaan sekä paikallisille muuttujille että funktioille. Kaikki toiminnossa olevat toiminnot suoritetaan kyseisen muistin avulla. Poistumisen ehto tarkistetaan, jos se täyttää. Kun kääntäjä havaitsee puhelun toiseen toimintoon, se varaa heti uuden muistin pinon päälle, jossa luodaan eri kopio samoista paikallisista muuttujista ja funktiosta. Anna sama prosessi jatkuu.

Kun perustila palaa totta, tietty arvo siirretään kutsutoiminnolle. Sille varattu muisti tyhjennetään. vastaavasti uusi arvo lasketaan kutsutoiminnossa ja IT palaa superkutsuun. Tällä tavalla toiminnon poistoon tehdään rekursiivisia puheluita ensimmäiseen funktioon ja koko pinon muisti tyhjennetään ja lähtö palautetaan. Kasvatuksen perusedellytystä tai poistumisehtoa ei määritetä toiminnossa, jolloin toiminnon rekursiiviset kutsut voivat johtaa äärettömään silmukkaan.

Esimerkki rekursiivisesta toiminnosta

Nyt tarkastelemme esimerkkejä rekursiivisesta toiminnosta C: ssä

Koodi:

#include
int fun(int n)
(
if(n==1) return 1 ; //exit or base condition which gives an idea when to exit this loop.
return n*fun(n-1); //function is called with n-1 as it's argument .
//The value returned is multiplied with the argument passed in calling function.
)
int main()(
int test=4;
int result =0;
result =fun(test);
printf("%d", result);//prints the output result.
)

lähtö:

Edellä mainitun koodin selitys

Edellä annettu esimerkki on numeron tekijän löytäminen. Kun päätoiminto kutsuu hauskaa (4), tarkistetaan ensin poistumisolosuhteet (4 == 1), sitten kutsutaan 4 * hauskaa (3). Jälleen perusedellytys (3 == 1) tarkistetaan. Vastaavasti se palauttaa 3 * fun (2) kutsutaan ja tämä jatkuu jopa 2 * fun (1) kutsutaan ja missä se täyttää perusedellytykset ja palauttaa 1 sitten kutsuva toiminto palauttaa 2 * 1 sitten, 3 * 2 * 1 ja ensimmäisestä puhelusta 4 * 3 * 2 * 1 palautetaan. Tuloksena on siten päätoimintovarasto 24 ja tulostaa tulosteen.

Rekursiivisen toiminnon muistin allokointi

Jokainen c-kielen funktion kutsu kutsuu muistin jakamisen pinon päälle. Kun rekursiivista toimintoa kutsutaan muistiksi, se allokoidaan kutsutoiminnolle osoitetun muistin yläosassa siten, että jokaiselle toiminnon kutsulle luodaan kaikki paikallisten muuttujien erilaisia ​​kopioita.
Mikä perusolosuhde saavutetaan, toiminnolle varattu muisti tuhoutuu ja osoitin palaa kutsutoimintoon? tämä prosessi toistetaan, sitten ensimmäinen kutsutoiminto ja lopulta pinon muisti tyhjenee.

Yllä olevassa esimerkissä alla olevan luvun tekijän laskemiseksi on skenaario muistin allokoinnista.

Vaihe 1

Vaihe 2

Vaihe - 3

Vaihe - 4

Vaihe - 5

Vaihe - 6

Vaihe - 7

Vaihe - 8

Vaihe - 9

Rekursiotyypit

C-ohjelmoinnissa on kahta tyyppiä rekursiota, jotka esitetään alla:

1. Häntä ja ei-hännäinen rekursio

Edellä annettu rekursiotyyppi selitetään alla:

  • Häntäkurssi

Se on funktion toistuvan funktion toistokutsu, joka on viimeinen toiminto funktion määrittelyssä. Tarkoittaa rekursiivista puhelua, kun kaikki muu toiminnon logiikka on toteutettu.

Häntärekursion käyttäminen ohjelmassamme hansis-ohjelman suorituskyvyn suhteen ja vähentää myös tämän toiminnon muistin käyttöä. Se johtuu siitä, että koska toiminnon muu logiikka on toteutettu kutsuvaan toimintoon varattuun muistiin, se voidaan poistaa pinosta ja käyttää uudelleen.

Koodi:

int fun1(n)(
printf(“the result is “);
return fun1(n-1);
)
void main()
(
fun1(4);
)

  • Ei-hännäinen rekursio

Tämän tyyppinen rekursiivinen rekursiivinen kollaasi, joka on tehty funktion määritelmän keskelle. Miesten housujen rekursio on suoritettu loppuun ja kutsutoimintoon palautetut arvot ovat suoritettavia lisävaiheita, joten muistia ei voi tyhjentää.

Koodi:

int fun1(n)(
printf(“the result is “);
return n* fun1(n-1);
)
void main()(
fun1(4);
)

2. Suora ja epäsuora rekursio

Edellä annettu rekursiotyyppi selitetään alla:

  • Epäsuora rekursio

Epäsuoran rekursion sanotaan tapahtuvan, kun tiettyä funktiota kutsutaan toisen funktion rekursiivisella väliaineella.

Koodi:

int fun1()(
fun2();
)
int fun2()(
fun1(); // calling the procedure recursively using another function.
)
void main()(
fun1();
)

  • Suora rekursio

Suoran rekursion sanotaan tapahtuvan, kun toistuva kutsu toimintoon soitetaan sen oman määritelmän sisällä. '

Koodi:

int fun1()(
fun1();
)
void main()(
fun1();
)

johtopäätös

Voidaan helposti päätellä, että rekursiiviset funktiot ovat tärkeimpiä sellaisten matemaattisten ongelmien ratkaisemisessa, jotka vaativat samanlaisen menetelmän, kaikki logiikat toteutetaan toistuvasti, kunnes poistumisehto täyttyy. Monet ongelmat, kuten Hanoin tornit, puiden kulkeminen, kuvaajien syvyyden laskeminen.

On tärkeää mainita rekursiivisen funktion perusedellytys. Muisti- ja aikavaatimukset ovat rekursiivisessa ohjelmassa suuremmat kuin iteratiivisissa, joten niitä on käytettävä varoen.

Suositellut artikkelit

Tämä on opas esimerkkiin rekursiivisesta toiminnasta C: ssä. Tässä keskustellaan C: n toiminnasta, tyypeistä, muistin allokoinnista ja esimerkkejä rekursiivisesta toiminnosta. Voit myös tarkastella seuraavia artikkeleita saadaksesi lisätietoja-

  1. Ryhmät C-ohjelmoinnissa
  2. Palindromi C-ohjelmassa
  3. Kuviot C-ohjelmoinnissa
  4. C vs. C ++
  5. Palindrome JavaScript-muodossa
  6. Opas Fibonacci-sarjaan JavaScriptillä