Uvod u rekurzivne funkcije u C ++

Za početak s rekurzivnom funkcijom u C ++, već smo poznavali osnovnu ideju iza C ++ funkcija koja uključuje definiciju funkcije za pozivanje i drugih funkcija. Ovaj članak pokriva koncept rekurzivne definicije, koncept alata za igru ​​u matematici i programskoj logici. Poznati primjer uključuje faktorije broja, zbroj prirodnih brojeva 'n' itd. Funkcija koja sama po sebi naziva poznata je kao rekurzivna funkcija. Oni su samo funkcija koja se opetovano poziva. Rekurzija ima alat za rješavanje problema, gdje veće probleme deli na jednostavne zadatke i pojedinačno izrađuje da slijedi pojedinačni slijed.

Koncepti podataka poput koncepta pretraživanja, sortiranja, prolaska drveća koriste rekurzivnu funkciju za njegova rješenja. Ova tehnika programiranja olakšava kôd. Iteracija i rekurzija izvršavaju isti postupak kao i ponavljanje koda, ali razlika u rekurziji je što oni izvršavaju određeni dio sa samom osnovnom funkcijom. U ovom ćemo članku detaljno objasniti važnost rekurzije i njihov radni proces.

Sintaksa rekurzivne funkcije u C ++

Opća sintaksa rekurzivne funkcije u c ++ dana je kao:

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

Kako djeluje rekurzivna funkcija u C ++?

Rekurzija izvodi ponavljanje na pozivima funkcija, a zaustavlja izvršenje kad osnovni slučaj postane istinit. U rekurzivnoj funkciji treba definirati osnovni slučaj da bi se izbjegla poruka o pogrešci prelijevanja snopa. Ako nije definiran osnovni slučaj, to vodi do beskonačne rekurzije. Kada se funkcija nazove, svaki put ih gura u snop radi rezervnih resursa za svaki poziv ponavljanja. Daje najbolje u prelasku drveća. Postoje dvije različite vrste rekurzije: izravna i neizravna rekurzija.

Izravna rekurzivna: ilustracija

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

Gornji format je izravni rekurzivni poziv gdje se odmah poziva / poziva sam. Razmotrimo drugu vrstu koja se naziva neizravna rekurzija i uključuje drugi poziv funkcije. Može se pogledati na donjoj slici:

Neizravna rekurzivna: ilustracija

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

Primjeri rekurzivne funkcije u C ++

U donjem programu možete vidjeti izvršenje programa za koji sam osigurao zadani osnovni uvjet. Ponekad uporaba stanja if-else u rekurziji pomaže u sprečavanju beskonačne rekurzije. Postupak koda vrši se djelomičnom otopinom na međuproduktu i oni se kombiniraju do konačnog rješenja kod repne rekurzije.

Primjer 1

Evo jednostavnog primjera Fibonaccijevog niza broja. Program u nastavku uključuje poziv rekurzivnoj funkciji definiranoj kao fib (int n) koja od korisnika uzima unos i sprema ga u 'n'. Sljedeći korak uključuje preuzimanje petlje za generiranje termina koji je proslijeđen u funkciju fib () i vraća Fibonaccijev niz. Osnovni slučaj postavlja se naredbom if provjerom broja = 1 ili 2 za ispis prve dvije vrijednosti. konačno, ova rekurzivna funkcija nastavlja se petljom za ispis serije 1, 1, 2.

Kodirati:

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

Izlaz:

Primjer 2

Provjera broja palindroma pomoću rekurzivne funkcije.

Kodirati:

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

Izlaz:

Primjer 3

Program s generatorom slučajnih brojeva.

Kodirati:

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

Gornji program prikazuje generator slučajnih brojeva kada se kockice nasumično kotrljaju. Izvodi se pozivanjem funkcije rand1 (int n) i generira 0 do n-1 brojeve. i postavljanje vrijednosti sjemena sa nulom (bez adrese). Na primjer, ako unesemo kao 4, baca mogućnost kocke kao 5, 4, 1, 2.

Izlaz:

Postoje i neki pojmovi poput linearne pretrage, zajedničkog djelitelja i najvažnijeg faktora određenog broja koji koristi rekurzivnu implementaciju.

Prosine rekurzije

  • Kôd koji im pruža je čist i kompaktan pojednostavljujući veći složeni program. Koristi manje varijabli u programskom kodu.
  • Ovdje se izbjegava složeni kôd i ugniježđene petlje.
  • Neki dio koda zahtijeva povratno gledanje koje se rješava rekurzivno.

Nedostaci rekurzije

  • Uzima više dodijeljene memorije zbog rada s radom svih poziva funkcija.
  • Ponekad djeluje sporije dok izvršava postupak ponavljanja. Stoga je učinkovitost manja.
  • Početnicima je teško razumjeti rad jer kôd ponekad ide u dubinu. ako dovede do van prostora i u konačnici prouzrokuje pad programa.

Zaključak

S ovim smo razgovarali o tome kako funkcioniraju c ++ funkcije i definirali ih rekurzivno. Prošli smo kroz dopisivanje i njihove prednosti i nedostatke rekurzivne funkcije u programskom svijetu. Zatim smo nastavili pokazujući kako se može implementirati u C ++ koristeći rekurzivnu definiciju funkcije. Nadalje, zaključujemo da rekurzija pomaže u C ++ u rješavanju problema u konceptima strukture podataka kao što su putopisi, razvrstavanje i pretraživanje i može se učinkovito koristiti gdje god je potrebno.

Preporučeni članci

Ovo je vodič za rekurzivnu funkciju u C ++. Ovdje smo raspravljali o tome kako rekurzivna funkcija djeluje u C ++, sintaksi, zajedno s različitim primjerima i implementacijom koda. Možete pogledati i sljedeće članke da biste saznali više -

  1. Što su C ++ funkcije matrice?
  2. Pregled funkcija C ++ stringa
  3. Najbolji sastavljač C ++ (primjeri)
  4. Uvod u C ++ naredbe
  5. Serija Fibonaccije na Javi
  6. Generator slučajnih brojeva u Matlabu
  7. Generator slučajnih brojeva u C #
  8. Palindrome u C ++
  9. Generator slučajnih brojeva u JavaScript-u
  10. Top 11 značajki i prednosti C ++
  11. Naučite vrste funkcija matrice u PHP-u

Kategorija: