Uvod u rekurzivno funkciju u C

Postupak ponavljanja predmeta na sličan način kao ranije, poznat je pod nazivom rekurzija. Kaže se da je funkcija rekurzivna ako se naziva unutar sebe. Rekurzija je podržana programskim jezikom C. Ispod su dva uvjeta koja su presudna za provođenje rekurzije u C:

  • Izlazni uvjet: ovaj uvjet pomaže funkciji da prepozna kada treba izaći iz te funkcije. U slučaju da ne odredimo uvjet izlaza, tada će kôd ući u beskonačnu petlju.
  • Promjena brojača: Promjena brojača u svakom pozivu na tu funkciju.

Na taj način možemo implementirati rekurzivnu funkciju u programskom jeziku C. Ove su funkcije korisne za rješavanje matematičkih problema novca koji zahtijevaju ponoviti sličan postupak nekoliko puta. Primjeri takvih problema su izračunavanje faktoriala niza generacija Fibonaccijevih serija.

Sintaksa:

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

Kako djeluje rekurzivna funkcija na C?

Rekurzivne funkcije način su za implementaciju jednadžbe u programskom jeziku C. Rekurzivna funkcija naziva se argumentom koji je prenesen u nju recimo n, memorija u snopu raspoređena je lokalnim varijablama kao i funkcijama. Sve operacije prisutne u funkciji izvode se pomoću te memorije. Uvjet za izlazak provjerava se ako ispunjava. Kad prevodilac otkrije poziv drugoj funkciji, odmah dodjeljuje novu memoriju na vrhu snopa gdje se stvara drugačija kopija istih lokalnih varijabli i stvara se funkcija. Unesite isti postupak i dalje.

Kad se osnovni uvjet vrati istinitim, određena vrijednost prelazi u funkciju pozivanja. Briše se memorija dodijeljena toj funkciji. Slično tome, nova vrijednost se izračunava u funkciji poziva i IT se vraća u funkciju super pozivanja. Na ovaj se način rekurzivni pozivi uklanjanja funkcije dosežu do prve funkcije i briše se cijela memorija snopa, a izlaz se vraća. U funkciji nije navedeno osnovno stanje ili uvjet izlaska, a onda rekurzivni pozivi na funkciju mogu dovesti do beskonačnog petlje.

Primjer rekurzivne funkcije

Sada ćemo vidjeti primjere rekurzivne funkcije u C

Kodirati:

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

Izlaz:

Objašnjenje gornjeg koda

Gore navedeni primjer je pronalaženje faktororija broja. Kad glavna funkcija nazove zabavu (4) tada se prvo provjerava uvjet izlaza (4 == 1), a zatim se poziva 4 * zabava (3). Opet se provjerava osnovni uvjet (3 == 1). Slično tome, vratit će se 3 * zabava (2) i to se nastavlja do 2 * zabava (1) se zove i tamo gdje ispunjava osnovni uvjet i vraća 1, a zatim poziva funkcija vraća 2 * 1 tada, 3 * 2 * 1 a iz prvog poziva 4 * 3 * 2 * 1 se vraća. Zbog toga se u glavnoj funkciji pohranjuju 24 i ispisuju oni na izlazu.

Dodjela memorije rekurzivne funkcije

Svaki poziv funkciji na jeziku c rezultira raspodjelom memorije na vrhu snopa. Kad se rekurzivna funkcija naziva memorija joj se raspoređuje na vrhu memorije koja je dodijeljena pozivojnoj funkciji sa svim različitim kopijama lokalnih varijabli za svaki poziv u funkciju.
Koji je osnovni uvjet postignut, memorija dodijeljena funkciji se uništava, a pokazivač se vraća u pozivnu funkciju? ovaj se postupak ponavlja tada prva funkcija pozivanja i na kraju se memorija snopa isprazni.

U gore navedenom primjeru za izračun fakultativnog broja niže naveden je scenarij raspodjele memorije.

Korak 1

Korak 2

Korak - 3

Korak - 4

Korak - 5

Korak - 6

Korak - 7

Korak - 8

Korak - 9

Vrste rekurzije

Postoje dvije vrste rekurzije u C programiranju:

1. Rep i rep

Gore navedeni oblik rekurzije objašnjen je u nastavku:

  • Rekurzija repova

To je vrsta rekurzivne funkcije rekurzijski poziv u funkciji koja je posljednja radnja koja je izvršena u definiranju funkcije. Znači rekurzivni poziv nastaje nakon što se primijeni sva ostala logika u funkciji.

Korištenjem repne rekurzije u našem programu, postiže se rad programa i također smanjuje upotreba memorije te funkcije. To je zato što je kao što je druga logika u funkciji implementirana u memoriju dodijeljenu pozivajućoj funkciji moguće ukloniti iz snopa i ponovo upotrijebiti.

Kodirati:

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

  • Nepouzdana rekurzija

Ova vrsta rekurzivnog rekurzivnog kolaža izrađena je usred definicije funkcije. Rekurzija muških hlača je završena, a vrijednosti vraćene u funkciju pozivanja moraju se izvesti više koraka, čime se memorija ne može očistiti.

Kodirati:

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

2. Izravna i neizravna rekurzija

Gore navedeni oblik rekurzije objašnjen je u nastavku:

  • Neizravna rekurzija

Kaže se da se neizravna rekurzija događa kada se određena funkcija na rekurzivni način poziva u sredinu druge funkcije.

Kodirati:

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

  • Izravna rekurzija

Izravna rekurzija kaže se kad se rekurzivni poziv funkciji izvrši u okviru vlastite definicije. '

Kodirati:

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

Zaključak

Lako se može zaključiti da su rekurzivne funkcije najvažnije za rješavanje matematičkih problema koji zahtijevaju sličnu metodu da se sva logika operira više puta dok se ne ispuni uvjet izlaska. Mnogo je problema poput kula u Hanoju, kretanja drvećem, izračunavanja dubine grafova.

Važno je spomenuti osnovni uvjet za rekurzivnu funkciju. Zahtjevi za memorijom i vremenom su za rekurzivni program veći u usporedbi s iterativnim, pa ih treba pažljivo koristiti.

Preporučeni članci

Ovo je vodič za primjer rekurzivne funkcije u C. Ovdje smo raspravljali o radu, vrstama, raspoređivanju memorije i primjerima rekurzivne funkcije u C. Također možete pogledati sljedeće članke da biste saznali više -

  1. Nizovi u C programiranju
  2. Palindrome u C programu
  3. Obrasci u C programiranju
  4. C u odnosu na C ++
  5. Palindrome u JavaScriptu
  6. Vodič za Fibonaccijeve serije u JavaScript

Kategorija: