Inleiding tot recursieve functie in C

Het proces waarbij de items op dezelfde manier worden herhaald als voorheen, wordt recursie genoemd. Van een functie wordt gezegd dat deze recursief is als deze in zichzelf wordt aangeroepen. Recursie wordt ondersteund door de programmeertaal C. Hieronder staan ​​twee voorwaarden die cruciaal zijn voor de implementatie van recursie in C:

  • Een exit-voorwaarde: deze conditie helpt de functie om te bepalen wanneer die functie moet worden verlaten. In het geval dat we de exit-voorwaarde niet specificeren, gaat de code een oneindige lus binnen.
  • Teller wijzigen : de teller in elke oproep voor die functie wijzigen.

Op deze manier kunnen we een recursieve functie in de programmeertaal C implementeren. Deze functies zijn nuttig voor het oplossen van wiskundige geldproblemen waarvoor een vergelijkbaar proces meerdere keren moet worden aangeroepen. Voorbeelden van dergelijke problemen zijn het berekenen van de faculteit van een aantal generatie Fibonacci-series.

Syntaxis:

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

Hoe werkt recursieve functie in C?

Recursieve functies zijn de manier om de vergelijking in C-programmeertaal te implementeren. Een recursieve functie wordt aangeroepen met een argument erin doorgegeven, zeg n, het geheugen in de stapel wordt toegewezen aan de lokale variabelen en aan de functies. Alle bewerkingen in de functie worden uitgevoerd met behulp van dat geheugen. De voorwaarde voor afsluiten wordt gecontroleerd als deze voldoet. Wanneer de compiler een oproep naar een andere functie detecteert, wijst deze onmiddellijk nieuw geheugen toe bovenaan de stapel waar een andere kopie van dezelfde lokale variabelen wordt gemaakt en de functie wordt gemaakt. Voer hetzelfde proces verder.

Wanneer de basisvoorwaarde true retourneert, wordt de specifieke waarde doorgegeven aan de aanroepfunctie. Het geheugen dat aan die functie is toegewezen, wordt gewist. op dezelfde manier wordt de nieuwe waarde berekend in de aanroepfunctie en keert IT terug naar de aanroepfunctie. Op deze manier worden recursieve oproepen gedaan naar de functie delete bereikt de eerste functie en wordt het hele stapelgeheugen gewist en wordt de uitvoer geretourneerd. Incase basisconditie of exitconditie is niet gespecificeerd in de functie. Recursieve aanroepen van de functie kunnen leiden tot een oneindige lus.

Voorbeeld van recursieve functie

Nu gaan we de voorbeelden van Recursieve Functie in C zien

Code:

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

Output:

Verklaring van bovenstaande code

Het hierboven gegeven voorbeeld is het vinden van de faculteit van een getal. Wanneer de hoofdfunctie fun (4) aanroept, wordt eerst de exit-voorwaarde (4 == 1) gecontroleerd en vervolgens 4 * fun (3) opgeroepen. Opnieuw wordt de basisconditie (3 == 1) gecontroleerd. Op dezelfde manier retourneert het 3 * fun (2) wordt aangeroepen en dit gaat door tot 2 * fun (1) wordt aangeroepen en waar het voldoet aan de basisvoorwaarde en 1 retourneert, roept de aanroepfunctie 2 * 1 dan op, 3 * 2 * 1 en vanaf het eerste gesprek wordt 4 * 3 * 2 * 1 geretourneerd. Dit resulteert dus in de opslag van de hoofdfunctie 24 en drukt die af bij de uitvoer.

Geheugentoewijzing van recursieve functie

Elke aanroep van een functie in c-taal resulteert in geheugentoewijzing bovenaan een stapel. Wanneer een recursieve functie wordt genoemd, wordt er geheugen aan toegewezen boven aan het geheugen dat is toegewezen aan de aanroepfunctie waarbij alle verschillende kopieën van lokale variabelen worden gemaakt voor elke aanroep van de functie.
Wat is de basisconditie is bereikt, het geheugen toegewezen aan de functie wordt vernietigd en pointer keert terug naar de aanroepfunctie? dit proces wordt herhaald en vervolgens de eerste aanroepfunctie en ten slotte raakt het stapelgeheugen leeg.

In het hierboven gegeven voorbeeld is het scenario voor geheugentoewijzing om de faculteit van een getal hieronder te berekenen.

Stap 1

Stap 2

Stap 3

Stap 4

Stap - 5

Stap - 6

Stap - 7

Stap - 8

Stap - 9

Soorten recursie

Er zijn twee soorten recursies in C-programmering die hieronder worden gegeven:

1. Staart en niet-tailed recursie

Het hierboven gegeven type recursie wordt hieronder uitgelegd:

  • Staart recursie

Het is een type recursieve functie-recursieaanroep in de functie die de laatste actie is die wordt uitgevoerd in de definitie van de functie. Betekent recursieve aanroep plaatsvindt nadat al het andere logica in de functie wordt geïmplementeerd.

Het gebruik van een staartrecursie in ons programma in hansis de prestaties van het programma en vermindert ook het geheugengebruik van deze functie. Dit komt omdat, omdat andere logica in de functie is geïmplementeerd, het geheugen dat is toegewezen aan de aanroepfunctie uit de stapel kan worden verwijderd en opnieuw kan worden gebruikt.

Code:

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

  • Niet-tailed recursie

Dit type recursieve recursieve collage gemaakt in het midden van de functiedefinitie. Heren broek recursie is voltooid en de waarden teruggegeven aan de roepfunctie zijn er meer stappen uit te voeren dus het geheugen kan niet worden gewist.

Code:

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

2. Directe en indirecte recursie

Het hierboven gegeven type recursie wordt hieronder uitgelegd:

  • Indirecte recursie

Er wordt gezegd dat indirecte recursie optreedt wanneer een bepaalde functie op een recursieve manier medium van een andere functie wordt genoemd.

Code:

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

  • Directe recursie

Er wordt gezegd dat directe recursie optreedt wanneer de recursieve aanroep van de functie binnen zijn eigen definitie wordt gedaan. '

Code:

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

Conclusie

Er kan eenvoudig worden geconcludeerd dat recursieve functies hoogstens belangrijk zijn voor het oplossen van wiskundige problemen waarvoor een vergelijkbare methode nodig is waarbij alle logica herhaaldelijk moet worden geïmplementeerd totdat aan een exit-voorwaarde is voldaan. Veel problemen zoals torens van Hanoi, boom doorkruisen, het berekenen van de diepte van grafieken.

Het is belangrijk om een ​​basisvoorwaarde voor de recursieve functie te vermelden. Geheugen- en tijdvereisten zijn groter voor het recursieve programma in vergelijking met de iteratieve, en moeten daarom zorgvuldig worden gebruikt.

Aanbevolen artikelen

Dit is een gids voor een voorbeeld van recursieve functie in C. Hier bespreken we werk, typen, geheugentoewijzing en voorbeelden van recursieve functie in C. U kunt ook de volgende artikelen bekijken voor meer informatie-

  1. Arrays in C-programmering
  2. Palindrome in C-programma
  3. Patronen in C-programmering
  4. C versus C ++
  5. Palindrome in JavaScript
  6. Handleiding voor Fibonacci-serie in JavaScript