Introducere în funcția recursivă în C ++

Pentru a începe cu funcția recursivă în C ++, am cunoscut deja ideea de bază din spatele funcțiilor C ++, care include definiția funcției pentru a apela și alte funcții. Și acest articol acoperă conceptul din spatele definiției recursive, un concept de instrument de joc în matematica și logica programării. Un exemplu familiar include factorialul unui număr, suma numerelor „n” naturale, etc. O funcție care apelează de la sine este cunoscută ca funcție Recursivă. Sunt doar o funcție care este invocată în mod repetat. Recursiunea are un instrument de rezolvare a problemelor, în care împarte problemele mai mari în sarcini simple și lucrează individual pentru a urma o secvență individuală.

Conceptele structurilor de date precum căutarea, sortarea, traversarea unui arbore folosesc funcția recursivă pentru soluțiile sale. Această tehnică de programare simplifică codul. Atât iterația, cât și recursiunea fac același proces ca o repetare a codului, însă diferența în recurs este că execută o parte specifică cu funcția de bază în sine. În acest articol, vom discuta despre importanța recursului și despre procesul lor de lucru cu un exemplu în detaliu.

Sintaxa funcției recursive în C ++

Sintaxa generală a funcției recursive în c ++ este dată ca:

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

Cum funcționează funcția recursivă în C ++?

Recursiunea efectuează repetări la apelurile funcționale și oprește execuția atunci când cazul de bază devine adevărat. În funcția recursivă ar trebui definită o situație de caz de bază pentru a evita mesajul de eroare de preaplin a stivei. Dacă nu este definit niciun caz de bază, aceasta conduce la o recursiune infinită. Când se numește o funcție, le împinge într-o stivă de fiecare dată pentru rezervarea resurselor pentru fiecare apel repetat. Acesta oferă cele mai bune la traversarea copacilor. Există două tipuri diferite de recursiune: recursivă directă și indirectă.

Recursiv direct: ilustrare

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

Formatul de mai sus este apelul recursiv direct unde apelează imediat / apelează de la sine. Luați în considerare un al doilea tip numit recursiune indirectă care implică un alt apel funcțional. Poate fi vizualizat în ilustrația de mai jos:

Recursiv indirect: ilustrare

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

Exemple de funcții recursive în C ++

În programul de mai jos puteți vedea execuția programului pe care am furnizat-o cu condiția de bază implicită. Uneori, folosirea condiției if-else în recursivitate ajută la prevenirea recursului infinit. Procesul codului se face cu soluția parțială la intermediar și acestea sunt combinate cu o soluție finală la o recursiune a cozii.

Exemplul # 1

Iată un exemplu simplu al unei serii Fibonacci a unui număr. Programul de mai jos include un apel la funcția recursivă definită ca fib (int n) care preia intrarea de la utilizator și o stochează în „n”. Următorul pas include luarea în considerare a buclei pentru a genera termenul care este trecut la funcția fib () și returnează seria Fibonacci. Cazul de bază este setat cu instrucțiunea if prin verificarea numărului = 1 sau 2 pentru a imprima primele două valori. în sfârșit, această funcție recursivă continuă cu bucla pentru a tipări seria 1, 1, 2.

Cod:

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

ieşire:

Exemplul # 2

Verificarea numărului palindrom folosind o funcție recursivă.

Cod:

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

ieşire:

Exemplul # 3

Program cu un generator de numere aleatorii.

Cod:

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

Programul de mai sus ilustrează un generator de numere aleatoare atunci când un zar este rulat la întâmplare. Se realizează prin apelarea unei funcții rand1 (int n) și generează numere de la 0 la n-1. și setarea valorii seminței cu nul (fără adresă). De exemplu, dacă introducem ca 4 aruncă o posibilitate de zaruri de 5, 4, 1, 2.

ieşire:

Există, de asemenea, unele concepte precum căutarea liniară, divizorul comun și cel mai important factorial al unui număr dat care utilizează implementarea recursivă.

Beneficiile recurentei

  • Codul furnizat de aceștia este curat și compact prin simplificarea programului complex mai mare. Utilizează mai puține variabile în codul programului.
  • Codul complex și cuibărit pentru bucle sunt evitate aici.
  • O parte a codului necesită backtracking care este rezolvată recursiv.

Contra recursiunii

  • Preia mai multă alocare a memoriei datorită funcționării în stivă a tuturor apelurilor funcționale.
  • Efectuează mai lent uneori în timp ce execută procesul de iterație. Prin urmare, eficiența este mai mică.
  • Pentru începători este dificil să înțeleagă funcționarea, deoarece uneori codul merge în profunzime. dacă duce la pierderea spațiului și cauzează în cele din urmă blocarea programelor.

Concluzie

Cu aceasta, am discutat despre modul în care funcționează funcțiile c ++ și definite recursiv. Și, am trecut prin corespondența și pro și contra lor funcției recursive în lumea programării. Apoi am continuat arătând cum poate fi implementat în C ++ folosind o definiție a funcției recursive. În plus, concluzionăm că recursiunea ajută în C ++ să rezolve probleme în concepte de structură a datelor, cum ar fi traversări, sortare și căutare și poate fi utilizată eficient oriunde este nevoie.

Articole recomandate

Acesta este un ghid pentru funcția recurentă în C ++. Aici vom discuta despre cum funcționează funcția recursivă în C ++, sintaxa împreună cu diferite exemple și implementarea codului. De asemenea, puteți consulta următoarele articole pentru a afla mai multe -

  1. Ce este C ++ Array Functions?
  2. Prezentare generală a funcțiilor șirurilor C ++
  3. Cel mai bun compilator C ++ (exemple)
  4. Introducere în comenzile C ++
  5. Seria Fibonacci în Java
  6. Generator de număr aleatoriu în Matlab
  7. Generator de număr aleatoriu în C #
  8. Palindrom în C ++
  9. Generator de număr aleatoriu în JavaScript
  10. Top 11 caracteristici și avantaje ale C ++
  11. Aflați tipurile de funcții Array în PHP