Introduktion till rekursiv funktion i C ++

För att börja med rekursiv funktion i C ++ har vi redan känt den grundläggande idén bakom C ++ -funktioner som inkluderar funktionsdefinition för att även kalla andra funktioner. Och den här artikeln täcker konceptet bakom den rekursiva definitionen, ett spelverktygskoncept i matematik och programmeringslogik. Ett välkänt exempel inkluderar faktorering av ett nummer, summan av 'n' naturliga nummer, etc. En funktion som ringer av sig själv kallas rekursiv funktion. De är bara en funktion som åberopas upprepade gånger. Rekursion har ett problemlösningsverktyg, där det delar upp de större problemen i enkla uppgifter och arbetar individuellt för att följa en individuell sekvens.

Datakonstruktionens begrepp som sökning, sortering, genomgång av ett träd använder den rekursiva funktionen för dess lösningar. Denna programmeringsteknik underlättar koden. Både iteration och rekursion gör samma process som en upprepning av koden, men skillnaden i rekursion är att de utför en specifik del med själva basfunktionen. I den här artikeln kommer vi att diskutera rekursionsvikt och deras arbetsprocess med ett exempel i detalj.

Syntax för rekursiv funktion i C ++

Den allmänna syntaxen för den rekursiva funktionen i c ++ ges som:

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

Hur rekursiv funktion fungerar i C ++?

Rekursion utför repetition på funktionssamtal, och det stoppar körningen när basfallet blir sant. Ett basfallsvillkor bör definieras i den rekursiva funktionen för att undvika felöverföring av stackoverflöde. Om inget basfall definieras leder det till oändlig rekursion. När en funktion kallas skjuter den in i en bunt varje gång för att reservera resurserna för varje repetitionssamtal. Det ger det bästa vid trädkorsning. Det finns två olika typer av rekursion: Direkt och indirekt rekursion.

Direkt rekursiv: Illustration

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

Ovanstående format är det direkta rekursiva samtalet där det ringer omedelbart / ringer själv. Tänk på en andra typ som kallas indirekt rekursion som involverar ett annat funktionssamtal. Det kan ses i nedanstående illustration:

Indirekt rekursiv: illustration

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

Exempel på rekursiv funktion i C ++

I nedanstående program kan du se exekveringen av programmet som jag har tillhandahållit med standardbasvillkoret. Ibland hjälper till att förhindra oändlig rekursion genom att använda annat-tillstånd i rekursion. Processen med koden görs med den partiella lösningen vid mellanprodukten och dessa kombineras till en slutlig lösning vid en svansrekursion.

Exempel 1

Här är ett enkelt exempel på en Fibonacci-serie med ett nummer. Nedanstående program inkluderar ett samtal till den rekursiva funktionen definierad som fib (int n) som tar input från användaren och lagrar den i 'n'. Nästa steg inkluderar att ta in för loop för att generera termen som skickas till funktionsfiben () och returnerar Fibonacci-serien. Basfallet ställs in med if-satsen genom att kontrollera siffran = 1 eller 2 för att skriva ut de två första värdena. slutligen fortsätter denna rekursiva funktion med loopen för att skriva ut serien 1, 1, 2.

Koda:

#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:

Exempel 2

Kontrollera om palindromnumret används med en rekursiv funktion.

Koda:

#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:

Exempel 3

Program med en slumptalsgenerator.

Koda:

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

Ovanstående program illustrerar en slumptalsgenerator när en tärning rullas slumpmässigt. Det utförs genom att ringa en funktion rand1 (int n) och genererar 0 till n-1-nummer. och inställning av frövärde med noll (ingen adress). Till exempel, om vi matar in som 4, kastar det en risk för tärningar som 5, 4, 1, 2.

Produktion:

Det finns också några begrepp som linjär sökning, gemensam divisor och viktigaste faktorer för ett visst antal som använder rekursiv implementering.

Fördelar med rekursion

  • Koden som tillhandahålls av dem är ren och kompakt genom att förenkla det större komplexa programmet. Använder färre variabler i programkoden.
  • Komplex kod och kapslade för slingor undviks här.
  • Vissa delar av koden kräver backtracking som löses rekursivt.

Nackdelar med rekursion

  • Tar mer minnesallokering på grund av stackfunktionen för alla funktionssamtal.
  • Ibland fungerar långsammare medan iterationsprocessen körs. Därför är effektiviteten mindre.
  • Det är svårt för nybörjare att förstå arbetet eftersom koden ibland fördjupas. om leder till utrymme och orsakar i slutändan program kraschar.

Slutsats

Med detta har vi diskuterat hur c ++ - funktioner fungerar och definierat rekursivt. Och vi har gått igenom korrespondensen och deras för- och nackdelar med rekursiv funktion i programmeringsvärlden. Sedan fortsatte vi med att visa hur det kan implementeras i C ++ med en rekursiv funktionsdefinition. Vidare drar vi slutsatsen att rekursion hjälper C ++ till att lösa problem i datakonstruktionsbegrepp som genomgång, sortering och sökning och kan användas effektivt där det behövs.

Rekommenderade artiklar

Detta är en guide till rekursiv funktion i C ++. Här diskuterar vi hur rekursiv funktion fungerar i C ++, syntax tillsammans med olika exempel och kodimplementering. Du kan också titta på följande artiklar för att lära dig mer -

  1. Vad är C ++ Array-funktioner?
  2. Översikt över C ++ strängfunktioner
  3. Bästa C ++ -kompileraren (exempel)
  4. Introduktion till C ++ -kommandon
  5. Fibonacci-serien i Java
  6. Slumpmässig nummergenerator i Matlab
  7. Slumptalsgenerator i C #
  8. Palindrome i C ++
  9. Random Number Generator i JavaScript
  10. Topp 11 funktioner och fördelar med C ++
  11. Lär dig typerna av arrayfunktioner i PHP

Kategori: