Introduktion til rekursiv funktion i C ++

For at starte med rekursiv funktion i C ++ har vi allerede kendt den grundlæggende idé bag C ++ -funktioner, der inkluderer funktionsdefinition til også at kalde andre funktioner. Og denne artikel dækker konceptet bag den rekursive definition, et spilværktøjskoncept i matematik og programmeringslogik. Et velkendt eksempel inkluderer faktorering af et tal, summen af ​​'n' naturlige tal osv. En funktion, der kaldes af sig selv, kaldes rekursiv funktion. De er bare en funktion, der gentagne gange påberåbes. Rekursion har fået et problemløsningsværktøj, hvor det opdeler de større problemer i enkle opgaver og træner individuelt for at følge en individuel sekvens.

Datastrukturerne begreber som søgning, sortering, gennemgang af et træ bruger den rekursive funktion til dets løsninger. Denne programmeringsteknik gør kode lettere. Både iteration og rekursion udfører den samme proces som en gentagelse af koden, men forskellen i rekursion er, at de udfører en bestemt del med selve basefunktionen. I denne artikel vil vi diskutere rekursionsbetydningen og deres arbejdsproces med et eksempel i detaljer.

Syntaks for rekursiv funktion i C ++

Den generelle syntaks for den rekursive funktion i c ++ er angivet som:

return type function name((arguments))
(
Body of the statements;
function name ((actual arguments)) // recursive function
)

Hvordan rekursiv funktion fungerer i C ++?

Rekursion udfører gentagelse på funktionskaldene, og det stopper udførelsen, når basissagen bliver sand. En basistilstand bør defineres i den rekursive funktion for at undgå stakoverløbsfejlmeddelelse. Hvis der ikke er defineret noget basistilfælde, fører det til uendelig rekursion. Når der kaldes en funktion, skubber de dem ind i en stak hver gang for at reservere ressourcerne for hver gentagelsesopkald. Det giver det bedste ved trækrydsning. Der er to forskellige typer rekursion: Direkte og indirekte rekursion.

Direkte rekursiv: Illustration

int fibn(n)
(
fib(n);
)
void main ()
(
fib(n);
)

Ovenstående format er det direkte rekursive opkald, hvor det straks ringer / ringer af sig selv. Overvej en anden type kaldet indirekte rekursion, som involverer et andet funktionsopkald. Det kan ses i nedenstående illustration:

Indirekte rekursive: Illustration

void f(int n) (
f1();
return;
)
void f2( int n) (
f();
return;
)
void f1() (
f2();
return;
)

Eksempler på rekursiv funktion i C ++

I nedenstående program kan du se udførelsen af ​​det program, som jeg har leveret med standardbasisbetingelsen. Undertiden hjælper brugen af ​​hvis-andet-tilstand i rekursion til at forhindre uendelig rekursion. Processen med koden udføres med den delvise opløsning ved mellemproduktet, og disse kombineres til en endelig løsning ved en halekursion.

Eksempel 1

Her er et simpelt eksempel på en Fibonacci-serie med et tal. Nedenstående program inkluderer et opkald til den rekursive funktion defineret som fib (int n), der tager input fra brugeren og gemmer den i 'n'. Det næste trin inkluderer indtagelse af for loop for at generere det udtryk, der overføres til funktionsfiben () og returnerer Fibonacci-serien. Basetypen indstilles med if-sætningen ved at kontrollere tallet = 1 eller 2 for at udskrive de to første værdier. endelig fortsætter denne rekursive funktion med løkken til at udskrive serien 1, 1, 2.

Kode:

#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)
#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)
#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)

Produktion:

Eksempel 2

Kontroller for palindromnummeret ved hjælp af en rekursiv funktion.

Kode:

#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)
#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)
#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)

Produktion:

Eksempel 3

Program med en tilfældig talgenerator.

Kode:

#include
#include
#include
#include
using namespace std;
int rand1(int n);
int main () (
int n, j;
int r;
srand(time (NULL));
cout << "Enter number of dice: ";
cin >> n;
for (j = 1; j <= n; j++) (
r = rand1(5) + 1;
cout << r << " ";
)
system("PAUSE");
return 0;
)
int rand1(int n) (
return rand () % n;
)

Ovenstående program illustrerer en tilfældig talgenerator, når en terning rulles tilfældigt. Det udføres ved at kalde en funktion rand1 (int n) og genererer 0 til n-1 tal. og indstilling af frøværdi med null (ingen adresse). For eksempel, hvis vi indtaster som 4, kaster det en mulighed for terninger som 5, 4, 1, 2.

Produktion:

Der er også nogle koncepter som lineær søgning, fælles divisor og vigtigste faktorial for et givet antal, der bruger rekursiv implementering.

Fordele ved rekursion

  • Koden, der leveres af dem, er ren og kompakt ved at forenkle det større komplekse program. Bruger færre variabler i programkoden.
  • Kompleks kode og indlejret for sløjfer undgås her.
  • En del af koden kræver backtracking, som løses rekursivt.

Ulemper ved rekursion

  • Tager mere hukommelsestildeling på grund af stackdriften for alle funktionsopkald.
  • Det fungerer undertiden langsommere, mens det udføres iterationsprocessen. Derfor er effektiviteten mindre.
  • Det er vanskeligt for begyndere at forstå arbejdet, da koden undertiden går i dybden. hvis fører ud af rummet og i sidste ende forårsager programnedbrud.

Konklusion

Med dette har vi drøftet, hvordan c ++ - funktioner fungerer og defineret rekursivt. Og vi har gennemgået korrespondance og deres fordele og ulemper med rekursiv funktion i programmeringsverdenen. Derefter fortsatte vi med at vise, hvordan det kan implementeres i C ++ ved hjælp af en rekursiv funktionsdefinition. Vi konkluderer endvidere, at rekursion hjælper med C ++ til at løse problemer i datastrukturkoncepter som gennemgang, sortering og søgning og kan bruges effektivt, hvor det er nødvendigt.

Anbefalede artikler

Dette er en guide til rekursiv funktion i C ++. Her diskuterer vi, hvordan rekursiv funktion fungerer i C ++, syntaks sammen med forskellige eksempler og kodeimplementering. Du kan også se på de følgende artikler for at lære mere -

  1. Hvad er C ++ array-funktioner?
  2. Oversigt over C ++ strengfunktioner
  3. Bedste C ++ -kompiler (eksempler)
  4. Introduktion til C ++ -kommandoer
  5. Fibonacci-serien i Java
  6. Tilfældig nummergenerator i Matlab
  7. Tilfældig nummergenerator i C #
  8. Palindrome i C ++
  9. Tilfældig nummergenerator i JavaScript
  10. Top 11 funktioner og fordele ved C ++
  11. Lær typer af array-funktioner i PHP

Kategori: