Introduktion til rekursiv funktion i C

Processen med at gentage genstande på en lignende måde, som den var før, kaldes rekursion. En funktion siges at være rekursiv, hvis den kaldes i sig selv. Rekursion understøttes af programmeringssprog C. Nedenfor er to betingelser, der er kritiske for implementering af rekursion i C:

  • En udgangsbetingelse: Denne betingelse hjælper funktionen med at identificere, hvornår denne funktion skal afsluttes. I tilfælde af at vi ikke specificerer udgangsbetingelsen, vil koden indgå i en uendelig sløjfe.
  • Ændring af tæller: Ændring af tælleren i hvert opkald til den funktion.

På denne måde kan vi implementere en rekursiv funktion i programmeringssprog C. Disse funktioner er nyttige til at løse penge matematiske problemer, der kræver, at en lignende proces kaldes flere gange. Eksempler på sådanne problemer er beregning af fabrikken for et antal Fibonacci-serien generation.

Syntaks:

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

Hvordan fungerer rekursiv funktion i C?

Rekursive funktioner er måden at implementere ligningen på programmeringssprog C på. En rekursiv funktion kaldes med et argument, der er sendt ind i det, siger n, hukommelse i stakken er allokeret til de lokale variabler såvel som funktionerne. Alle de operationer, der er til stede i funktionen, udføres ved hjælp af denne hukommelse. Betingelsen for udgang kontrolleres, om den opfylder. Når compiler registrerer et opkald til en anden funktion, tildeler den straks ny hukommelse øverst i stakken, hvor en anden kopi af de samme lokale variabler og funktionen oprettes. Indtast den samme proces fortsætter.

Når basisbetingelsen vender tilbage, overføres den bestemte værdi til opkaldsfunktionen. Hukommelsen, der er tildelt til denne funktion, slettes. på lignende måde beregnes den nye værdi i opkaldsfunktionen, og IT vender tilbage til superopkaldsfunktionen. På denne måde foretages rekursive opkald til, at funktionssletningen når den første funktion, og hele stackhukommelsen ryddes, og output returneres. Incase-basistilstand eller exit-tilstand er ikke specificeret i funktionen, da rekursive opkald til funktionen kan føre til en uendelig sløjfe.

Eksempel på rekursiv funktion

Nu vil vi se eksemplerne på rekursiv funktion i C

Kode:

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

Produktion:

Forklaring af ovenstående kode

Ovennævnte eksempel er at finde et nummer. Når hovedfunktionen kalder sjov (4), kontrolleres først exittilstanden (4 == 1), derefter kaldes 4 * fun (3). Igen bliver basisbetingelse (3 == 1) kontrolleret. Tilsvarende vil det returnere 3 * sjov (2) kaldes, og dette fortsætter op til 2 * sjov (1) kaldes, og hvor det opfylder basisbetingelsen og returnerer 1, så ringer funktionen tilbage 2 * 1 derefter, 3 * 2 * 1 og fra det første opkald returneres 4 * 3 * 2 * 1. Således resulterer i hovedfunktionslagre 24 og udskrives på output.

Hukommelsestildeling af rekursiv funktion

Hvert opkald til en funktion på c-sprog resulterer i hukommelsesallokering på toppen af ​​en stak. Når der kaldes en rekursiv funktion tildeles hukommelse til den øverst i hukommelsen, der er tildelt opkaldsfunktionen, oprettes alle de forskellige kopier af lokale variabler for hvert opkald til funktionen.
Hvad er basisbetingelsen nås, hukommelsen, der er tildelt til funktionen, bliver ødelagt, og markøren vender tilbage til den opkaldsfunktion? denne proces gentages derefter den første opkaldsfunktion, og til sidst bliver hukommelsen tom.

I det ovenfor givne eksempel til beregning af faktoren for et tal nedenfor er scenariet for hukommelsesallokering.

Trin 1

Trin - 2

Trin - 3

Trin - 4

Trin - 5

Trin - 6

Trin - 7

Trin - 8

Trin - 9

Rekursstyper

Der er to typer rekursion i C-programmering, der er givet nedenfor:

1. Hale og ikke-tailed rekursion

Ovenstående type rekursion forklares nedenfor:

  • Halsrekursion

Det er en type rekursiv funktion rekursionsopkald i funktionen, der er den sidste handling, der skal udføres i definitionen af ​​funktionen. Betyder rekursivt opkald, når alt andet logik i funktionen er implementeret.

Ved hjælp af en hale-rekursion i vores program i hansis udføres programmets ydeevne og reducerer også hukommelsesforbruget af denne funktion. Det er sådan, fordi som anden logik i funktionen er implementeret i hukommelsen, der er tildelt til opkaldsfunktionen, kan fjernes fra stakken og genbruges.

Kode:

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

  • Ikke-halet rekursion

Denne type rekursive rekursive collage lavet midt i funktionsdefinitionen. Rekursion for mænds bukser er afsluttet, og værdierne, der returneres til den opkaldsfunktion, der er flere trin, der skal udføres, så hukommelsen kan ikke slettes.

Kode:

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

2. Direkte og indirekte rekursion

Ovenstående type rekursion forklares nedenfor:

  • Indirekte rekursion

Det siges, at indirekte rekursioner forekommer, når en bestemt funktion kaldes på rekursivt måde medie fra en anden funktion.

Kode:

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

  • Direkte rekursion

Direkte rekursion siges at forekomme, når det rekursive opkald til funktionen foretages inden for sin egen definition. '

Kode:

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

Konklusion

Det kan let konkluderes, at rekursive funktioner højst er vigtige for at løse matematiske problemer, der kræver, at en lignende metode, al logik, implementeres gentagne gange, indtil en exit-betingelse er opfyldt. Mange problemer såsom Hanoi-tårne, træovergang, beregning af gradedybde.

Det er vigtigt at nævne en basisbetingelse for den rekursive funktion. Hukommelses- og tidsbehov er større for det rekursive program sammenlignet med de iterative dem, og skal derfor bruges omhyggeligt.

Anbefalede artikler

Dette er en guide til eksempel på rekursiv funktion i C. Her diskuterer vi arbejde, typer, hukommelsesfordeling og eksempler på rekursiv funktion i C. Du kan også se på de følgende artikler for at lære mere-

  1. Arrays i C-programmering
  2. Palindrome in C-program
  3. Mønstre i C-programmering
  4. C vs C ++
  5. Palindrome i JavaScript
  6. Vejledning til Fibonacci-serien i JavaScript

Kategori: