Uvod v rekurzivno delovanje v C

Postopek ponavljanja predmetov na podoben način, kot je bil prej, je znan kot rekurzija. Funkcija naj bi bila rekurzivna, če je poklicana znotraj sebe. Rekurzija je podprta s programskim jezikom C. Spodaj sta dva pogoja, ki sta ključna za izvajanje rekurzije v C:

  • Izhodni pogoj: Ta pogoj funkciji pomaga določiti, kdaj zapustiti to funkcijo. V primeru, da ne določimo izhodnega pogoja, bo koda vstopila v neskončno zanko.
  • Spreminjanje števca: Spreminjanje števca pri vsakem klicu te funkcije.

Na ta način lahko izvedemo rekurzivno funkcijo v programskem jeziku C. Te funkcije so uporabne za reševanje matematičnih problemov z denarjem, ki zahtevajo, da se podoben postopek zahteva večkrat. Primeri takih težav so izračun faktoriala številnih generacij Fibonaccijevih serij.

Sintaksa:

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

Kako deluje rekurzivna funkcija v C?

Rekurzivne funkcije so način za izvajanje enačbe v programskem jeziku C. Pokliče se rekurzivna funkcija z argumentom, ki je v njo naveden n, pomnilnik v nizu je dodeljen lokalnim spremenljivkam kot tudi funkcijam. Vse operacije v funkciji se izvajajo s tem pomnilnikom. Pogoj za izhod se preveri, če izpolnjuje. Ko prevajalnik zazna klic k drugi funkciji, takoj dodeli nov pomnilnik na zgornjem delu zložbe, kjer se ustvari drugačna kopija istih lokalnih spremenljivk in funkcija. Vnesite isti postopek še naprej.

Ko se osnovni pogoj vrne, je določena vrednost predana klicni funkciji. Pomnilnik, dodeljen tej funkciji, se zbriše. podobno se nova vrednost izračuna v klicni funkciji in IT se vrne v funkcijo super klicev. Tako se izvedejo rekurzivni klici, da funkcija brisanje doseže prvo funkcijo, celotni pomnilnik skladovnice pa se izbriše in izhod se vrne. Osnovno stanje ali stanje izhoda v funkciji ni določeno, potem lahko rekurzivni klici funkcije vodijo v neskončno zanko.

Primer rekurzivne funkcije

Zdaj si bomo ogledali primere rekurzivne funkcije v C

Koda:

#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.
)

Izhod:

Pojasnilo zgornjega zakonika

Zgoraj navedeni primer je iskanje faktoriala številke. Ko glavna funkcija pokliče zabavo (4), se najprej preveri stanje izhoda (4 == 1), nato se pokliče 4 * zabava (3). Spet se preveri osnovni pogoj (3 == 1). Podobno se bo vrnil klic 3 * zabave (2) in to se nadaljuje do 2 * zabave (1) se pokliče in kjer izpolni osnovni pogoj in vrne 1, potem klicna funkcija vrne 2 * 1 nato, 3 * 2 * 1 in s prvega klica se vrne 4 * 3 * 2 * 1. Posledica tega je, da glavna funkcija shrani 24 in natisne tisto na izhodu.

Dodelitev pomnilnika rekurzivne funkcije

Vsak klic funkcije v jeziku c povzroči dodelitev pomnilnika na vrhu zložbe. Ko se rekurzivna funkcija imenuje pomnilnik se ji dodeli na vrhu pomnilnika, ki je dodeljen klicni funkciji z vsemi različnimi kopijami lokalnih spremenljivk, se ustvarijo za vsak klic funkcije.
Kolikšen je dosežen osnovni pogoj, se pomnilnik, dodeljen funkciji, uniči in kazalec se vrne v klicno funkcijo? ta postopek se ponovi, potem je prva funkcija klicanja in nazadnje se pomnilnik sklada izprazni.

V zgornjem primeru za izračun faktorja številke spodaj je scenarij za dodelitev pomnilnika.

Korak 1

Korak - 2

Korak - 3

Korak - 4

Korak - 5

Korak - 6

Korak - 7

Korak - 8

Korak - 9

Vrste rekurzije

Spodaj so podane dve vrsti rekurzije v programiranju C:

1. Rep in Ne-rep recursion

Spodaj je razložena zgornja vrsta rekurzije:

  • Rekurzija repov

Gre za vrsto rekurzivne funkcije rekurzijski klic v funkciji, ki je zadnje dejanje, ki ga je treba opraviti pri opredelitvi funkcije. Pomeni, da se rekurzivni klic pojavi po tem, ko se izvede vsa druga logika v funkciji.

Uporaba rekurzije repa v našem programu pomeni delovanje programa in tudi zmanjšuje porabo pomnilnika te funkcije. Tako je, ker je bila, kot je bila uporabljena druga logika v funkciji, pomnilnik, dodeljen klicni funkciji, mogoče odstraniti iz sklada in ga ponovno uporabiti.

Koda:

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

  • Nesrečna rekurzija

Ta vrsta rekurzivnega rekurzivnega kolaža, narejenega sredi definicije funkcije. Rekurzija moških hlač je zaključena in vrednosti, ki so se vrnile klicni funkciji, je treba izvesti več korakov, zato spomina ni mogoče očistiti.

Koda:

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

2. Neposredna in posredna rekurzija

Spodaj je razložena zgornja vrsta rekurzije:

  • Posredna rekurzija

Neposredna rekurzija naj bi se zgodila, kadar se določena funkcija na rekurzivni način pokliče v drug način druge funkcije.

Koda:

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

  • Neposredna rekurzija

Neposredna rekurzija naj bi se zgodila, kadar se rekurzivni klic na funkcijo izvede v okviru lastne definicije. "

Koda:

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

Zaključek

Zlahka lahko sklepamo, da so rekurzivne funkcije kvečjemu pomembne za reševanje matematičnih problemov, ki zahtevajo podobno metodo, da se vsa logika večkrat izvaja, dokler ni izpolnjen pogoj za izhod. Veliko težav, kot so stolpi v Hanoju, drevesni prehodi, izračun globine grafov.

Pomembno je omeniti osnovni pogoj rekurzivne funkcije. Zahteve po pomnilniku in času so za rekurzivni program večje v primerjavi s ponavljajočimi se programi, zato jih je treba uporabljati previdno.

Priporočeni članki

To je vodnik za primer rekurzivne funkcije v C. Tukaj razpravljamo o delu, vrstah, razporeditvi pomnilnika in primerih rekurzivne funkcije v C. Za več informacij lahko pogledate tudi naslednje članke -

  1. Nizi v C programiranju
  2. Palindrome v programu C
  3. Vzorci v C programiranju
  4. C proti C ++
  5. Palindrome v JavaScript
  6. Vodnik po Fibonaccijevih serijah v JavaScript