Sissejuhatus C ++ rekursiivsesse funktsiooni

Alustades C ++ rekursiivse funktsiooniga, oleme juba teadnud C ++ funktsioonide põhiidee, mis sisaldab funktsiooni määratlust ka muude funktsioonide kutsumiseks. Ja see artikkel hõlmab rekursiivse määratluse taga olevat mõistet, mänguvahendi kontseptsiooni matemaatikas ja programmeerimisloogikat. Tuttav näide sisaldab numbri faktoriaalide, n-arvu naturaalarvude summa jne. Funktsiooni, mis ise kutsub, nimetatakse rekursiivseks funktsiooniks. Need on lihtsalt funktsioon, millele rakendatakse korduvalt. Rekursioonil on probleemide lahendamise tööriist, kus see jaguneb suuremad probleemid lihtsateks ülesanneteks ja individuaalseks treenimiseks individuaalse jao järgi.

Andmestruktuuride kontseptsioonid, nagu puu otsimine, sortimine ja liikumine, kasutavad selle lahenduste jaoks rekursiivset funktsiooni. See programmeerimistehnika muudab koodi lihtsamaks. Nii iteratsioon kui ka rekursioon teostavad sama protsessi nagu koodi kordamine, kuid rekursiooni erinevus seisneb selles, et nad täidavad baasfunktsiooniga konkreetse osa. Selles artiklis käsitleme üksikasjalikult rekursiooni olulisust ja nende tööprotsessi koos näitega.

Rekursiivse funktsiooni süntaks C ++ -s

Rekursiivse funktsiooni üldine süntaks c ++ -s on esitatud järgmiselt:

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

Kuidas rekursiivne funktsioon töötab C ++ -s?

Rekursioon kordab funktsioonikõnesid ja see peatab täitmise, kui baasjuhtum saab tõeks. Rekursiivses funktsioonis tuleks määratleda põhitingimused, et vältida virna ületäitumise veateadet. Kui baasjuhtumit ei määratleta, viib see lõpmatu rekursioonini. Kui funktsiooni kutsutakse, lükkab see nad iga kord virna ressursside reserveerimiseks iga korduskõne jaoks. See annab puu liikumisel parima. Rekursioone on kahte tüüpi: otsene ja kaudne rekursioon.

Otsene rekursiivne: illustratsioon

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

Ülaltoodud vorming on otsene rekursiivne kõne, kus see helistab kohe / helistab ise. Vaatleme teist tüüpi kaudset rekursiooni, mis hõlmab teist funktsioonikutset. Seda saab vaadata alloleval illustratsioonil:

Kaudne rekursiivne: illustratsioon

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

C ++ rekursiivse funktsiooni näited

Allpool olevas programmis näete programmi täitmist, mille olen pakkunud vaikimisi põhitingimustega. Mõnikord aitab if-else tingimuse kasutamine rekursioonil vältida lõpmatut rekursiooni. Koodiprotsess toimub osalise lahusega vaheühendil ja need ühendatakse lõpplahenduseks saba rekursioonil.

Näide nr 1

Siin on lihtne näide numbri Fibonacci seeriast. Allpool olev programm sisaldab kõnet rekursiivsele funktsioonile, mis on määratletud kui fib (int n) ja võtab kasutajalt sisendi ning salvestab selle n-s. Järgmine samm hõlmab silmuse loomist termini genereerimiseks, mis antakse funktsioonile fib () ja tagastab Fibonacci seeria. Algjuhtum seadistatakse if-avaldusega, kontrollides arvu = 1 või 2, et printida kaks esimest väärtust. lõpuks jätkub see rekursiivne funktsioon ahelaga 1, 1, 2 seeria printimiseks.

Kood:

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

Väljund:

Näide 2

Palindroomi numbri kontrollimine rekursiivse funktsiooni abil.

Kood:

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

Väljund:

Näide 3

Programm juhuslike arvude generaatoriga.

Kood:

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

Ülaltoodud programm illustreerib juhusliku arvu generaatorit, kui täringut juhuslikult veeretatakse. See teostatakse funktsiooni rand1 (int n) kutsumisega ja see genereerib numbrid 0 kuni n-1. ja seemne väärtuse seadmine nulliga (aadress puudub). Näiteks kui sisestame 4, siis täringute väärtus on 5, 4, 1, 2.

Väljund:

Samuti on olemas mõned mõisted nagu lineaarne otsing, ühine jagaja ja antud numbri kõige olulisem faktoriaal, mis kasutab rekursiivset rakendamist.

Rekursiooni plussid

  • Nende pakutav kood on puhas ja kompaktne, lihtsustades suuremat keerulist programmi. Kasutab programmi koodis vähem muutujaid.
  • Siin välditakse keerulist koodi ja silmuste pesad.
  • Mingi osa koodist nõuab tagasiulatuvat lahendust, mis lahendatakse rekursiivselt.

Rekursiooni miinused

  • Kõigi funktsioonikõnede virna toimimise tõttu võtab rohkem mälu.
  • See toimib iteratsiooniprotsessi teostades mõnikord aeglasemalt. Seetõttu on efektiivsus väiksem.
  • Algajatel on raske toimimisest aru saada, kuna mõnikord läheb kood põhjalikuks. kui see viib ruumist välja ja põhjustab lõpuks programmi krahhe.

Järeldus

Sellega oleme arutanud, kuidas c ++ funktsioonid töötavad ja defineeritud rekursiivselt. Ja oleme läbinud programmeerimismaailmas kirjavahetuse ning nende rekursiivse funktsiooni plussid ja miinused. Seejärel jätkasime näitamist, kuidas seda saab C ++ -s rakendada, kasutades rekursiivset funktsiooni. Lisaks järeldame, et rekursioon aitab C ++-is lahendada probleeme andmestruktuuri kontseptsioonides, nagu näiteks liikumised, sortimine ja otsimine, ning seda saab tõhusalt kasutada kõikjal, kus vaja.

Soovitatavad artiklid

See on juhend C ++ rekursiivse funktsiooni kohta. Siin arutatakse, kuidas rekursiivne funktsioon C ++-s töötab, süntaksit koos erinevate näidete ja koodi rakendamisega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. Mis on C ++ massiivi funktsioonid?
  2. C ++ keelte funktsioonide ülevaade
  3. Parim C ++ kompilaator (näited)
  4. Sissejuhatus C ++ käskudesse
  5. Fibonacci seeria Java
  6. Juhuslike arvude generaator Matlabis
  7. Juhuslike arvude generaator C-numbris
  8. Palindroom C ++
  9. Juhuslike arvude generaator JavaScriptis
  10. C ++ 11 peamist funktsiooni ja eelist
  11. Lugege PHP-i massiivi funktsioonide tüüpe

Kategooria: