Introduktion till rekursiv funktion i C

Processen att upprepa artiklarna på samma sätt som tidigare var känd som rekursion. En funktion sägs vara rekursiv om den kallas i sig själv. Rekursion stöds av programmeringsspråket C. Nedan finns två villkor som är kritiska för att genomföra rekursion i C:

  • Ett utgångsvillkor: Detta villkor hjälper funktionen att identifiera när den ska avsluta funktionen. Om vi ​​inte specificerar utgångsvillkoret kommer koden att gå in i en oändlig slinga.
  • Ändra räknaren: Ändra räknaren i varje samtal till den funktionen.

På detta sätt kan vi implementera en rekursiv funktion på programmeringsspråket C. Dessa funktioner är användbara för att lösa matematiska problem med pengar som kräver att en liknande process kallas flera gånger. Exempel på sådana problem är att beräkna fabriken för ett antal generationer av Fibonacci-serien.

Syntax:

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

Hur rekursiv funktion fungerar i C?

Rekursiva funktioner är sättet att implementera ekvationen i programmeringsspråk C. En rekursiv funktion kallas med ett argument som matats in i det säger n, minnet i stacken är allokerat till de lokala variablerna såväl som funktionerna. Alla operationer som finns i funktionen utförs med det minnet. Villkoret för utgång kontrolleras om det uppfyller. När kompilatorn upptäcker ett samtal till en annan funktion tilldelar den omedelbart nytt minne överst på bunten där en annan kopia av samma lokala variabler och funktionen skapas. Ange samma process fortsätter.

När basvillkoret returnerar sant överförs det specifika värdet till den samtalande funktionen. Minnet som tilldelats den funktionen rensas. På samma sätt beräknas det nya värdet i samtalsfunktionen och IT återgår till supersamtalsfunktionen. På det här sättet rekursiva samtal görs för att funktionens borttagning når den första funktionen och hela stackminnet rensas och utdata returneras. Incase-basförhållanden eller utgångsvillkor anges inte i funktionen då kan rekursiva samtal till funktionen leda till en oändlig slinga.

Exempel på rekursiv funktion

Nu kommer vi att se exemplen på rekursiv funktion i 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.
)

Produktion:

Förklaring av ovanstående kod

Det ovan givna exemplet är att hitta faktorn för ett nummer. När huvudfunktionen kallar fun (4), kontrolleras först utgångsvillkoret (4 == 1) och sedan 4 * fun (3). Återigen kontrolleras basvillkoret (3 == 1). På samma sätt kommer det att returnera 3 * fun (2) kallas och detta fortsätter upp till 2 * fun (1) kallas och där det uppfyller basvillkoret och returnerar 1 så återgår samtalfunktionen 2 * 1 då, 3 * 2 * 1 och från det första samtalet returneras 4 * 3 * 2 * 1. Således resulterar i att huvudfunktion lagrar 24 och skriver ut det på utgången.

Minnesallokering av rekursiv funktion

Varje samtal till en funktion på c-språk resulterar i minnesallokering på toppen av en bunt. När en rekursiv funktion kallas minnes allokeras till den på toppen av minnet som har tilldelats samtalsfunktionen med alla olika kopior av lokala variabler skapas för varje samtal till funktionen.
Vad är basvillkoret uppnås, minnet som tilldelats till funktionen förstörs och pekaren återgår till den samtalande funktionen? denna process upprepas sedan den första samtalsfunktionen och slutligen blir stackminnet tomt.

I det ovan givna exemplet för att beräkna faktorn för ett nummer nedan är scenariot för minnesallokering.

Steg 1

Steg 2

Steg 3

Steg - 4

Steg - 5

Steg - 6

Steg - 7

Steg - 8

Steg - 9

Typer av rekursion

Det finns två typer av rekursion i C-programmering som ges nedan:

1. Rekursion för svans och icke-svans

Ovanstående typ av rekursion förklaras nedan:

  • Rekursion för svans

Det är en typ av rekursiv funktion rekursionssamtal i funktionen som är den sista åtgärden som ska göras i definitionen av funktionen. Betyder rekursivt samtal efter att allt annat logik i funktionen har implementerats.

Att använda en svansrekursion i vårt program i hansis prestandan för programmet och minskar också minnesanvändningen av så funktion. Det är så eftersom annan logik i funktionen har implementerats till det minne som tilldelats den anropande funktionen kan tas bort från stacken och återanvändas.

Koda:

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

  • Rekursion utan tailed

Denna typ av rekursiv rekursiv collage gjord mitt i funktionsdefinitionen. Rekursion för byxor för män är avslutad och värdena som återgår till den anropande funktionen finns det fler steg som ska utföras så att minnet inte kan rensas.

Koda:

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

2. Direkt och indirekt rekursion

Ovanstående typ av rekursion förklaras nedan:

  • Indirekt rekursion

Indirekt rekursion sägs inträffa när en viss funktion kallas på rekursivt sätt medium för en annan funktion.

Koda:

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

  • Direkt rekursion

Direkt rekursion sägs inträffa när det rekursiva samtalet till funktionen görs inom sin egen definition. '

Koda:

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

Slutsats

Det kan lätt dras slutsatsen att rekursiva funktioner är högst viktiga för att lösa matematiska problem som kräver en liknande metod, all logik för att implementeras upprepade gånger tills ett utgångsvillkor är uppfyllt. Många problem som torn i Hanoi, trädkorsning, beräkning av djup på grafer.

Det är viktigt att nämna ett grundvillkor för den rekursiva funktionen. Minne- och tidsbehov är större för det rekursiva programmet jämfört med de iterativa, och måste därför användas noggrant.

Rekommenderade artiklar

Detta är en guide till exempel på rekursiv funktion i C. Här diskuterar vi arbete, typer, minnesallokering och exempel på rekursiv funktion i C. Du kan också titta på följande artiklar för att lära dig mer-

  1. Arrays in C-programmering
  2. Palindrome in C-programmet
  3. Mönster i C-programmering
  4. C vs C ++
  5. Palindrome i JavaScript
  6. Guide till Fibonacci-serien i JavaScript

Kategori: