Úvod do rekurzívnej funkcie v C ++

Ak chcete začať s rekurzívnou funkciou v C ++, už sme poznali základnú myšlienku funkcií C ++, ktorá zahŕňa definíciu funkcie na volanie ďalších funkcií. Tento článok sa venuje pojmu rekurzívnej definície, koncepcii hracích nástrojov v matematike a programovacej logike. Známy príklad zahŕňa faktoriál čísla, súčet prirodzených čísel „n“ atď. Funkcia, ktorá sama volá, je známa ako rekurzívna funkcia. Sú to iba funkcie, ktoré sa opakovane vyvolávajú. Rekurzia má nástroj na riešenie problémov, v ktorom rozdeľuje väčšie problémy na jednoduché úlohy a pracuje individuálne, aby sledoval jednotlivé sledy.

Koncepty dátových štruktúr, ako je prehľadávanie, triedenie, priechod stromu, využívajú rekurzívnu funkciu pre svoje riešenia. Táto programovacia technika uľahčuje kód. Iterácia a rekurzia robia rovnaký proces ako opakovanie kódu, ale rozdiel v rekurzii spočíva v tom, že vykonávajú určitú časť so samotnou základnou funkciou. V tomto článku budeme podrobne diskutovať o dôležitosti rekurzie a ich pracovnom procese.

Syntax rekurzívnej funkcie v C ++

Všeobecná syntax rekurzívnej funkcie v c ++ sa uvádza ako:

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

Ako funguje rekurzívna funkcia v C ++?

Rekurzia vykoná opakovanie volania funkcií a zastaví vykonávanie, keď sa stane základný prípad. V rekurzívnej funkcii by sa mala definovať podmienka základného prípadu, aby sa zabránilo chybovej správe o pretečení zásobníka. Ak nie je definovaný žiadny základný prípad, vedie to k nekonečnej rekurzii. Keď sa funkcia volá, posunie ich vždy do zásobníka pre rezervovanie zdrojov pre každé opakované volania. To dáva najlepšie pri stromovom priechode. Existujú dva rôzne typy rekurzie: priama a nepriama rekurzia.

Priame rekurzívne: Ilustrácia

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

Vyššie uvedený formát predstavuje priame rekurzívne volanie, pri ktorom sa okamžite zavolá / zavolá sám. Zoberme si druhý typ nazývaný nepriama rekurzia, ktorý zahŕňa ďalšie volanie funkcie. Je to možné vidieť na nasledujúcom obrázku:

Nepriamy rekurzívny: Ilustrácia

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

Príklady rekurzívnej funkcie v C ++

V nižšie uvedenom programe vidíte vykonanie programu, ktorý som poskytol s predvolenou základnou podmienkou. Niekedy použitie stavu if-else pri rekurzii pomáha predchádzať nekonečnej rekurzii. Proces kódu sa uskutočňuje s čiastočným roztokom v medziprodukte a tieto sa kombinujú do konečného roztoku pri rekurzii chvosta.

Príklad č. 1

Toto je jednoduchý príklad série Fibonacciho čísla. Nižšie uvedený program obsahuje volanie na rekurzívnu funkciu definovanú ako vlákno (int n), ktoré berie vstup od používateľa a uloží ho do 'n'. Ďalší krok zahŕňa prevzatie slučky, aby sa vygeneroval výraz, ktorý sa odovzdá funkčnej fib () a vráti sériu Fibonacci. Základný prípad sa nastaví pomocou príkazu if kontrolou čísla = 1 alebo 2, aby sa vytlačili prvé dve hodnoty. nakoniec, táto rekurzívna funkcia pokračuje so slučkou na tlačenie série 1, 1, 2.

kód:

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

Príklad č. 2

Kontrola čísla palindrómu pomocou rekurzívnej funkcie.

kód:

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

Príklad č. 3

Programujte pomocou generátora náhodných čísel.

kód:

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

Vyššie uvedený program znázorňuje generátor náhodných čísel, keď sa kocky náhodne hodia. Vykonáva sa vyvolaním funkcie rand1 (int n) a vygeneruje 0 až n-1 čísla. a nastavenie počiatočnej hodnoty s nulovou hodnotou (bez adresy). Napríklad, ak zadáme 4, hodí sa kocka ako 5, 4, 1, 2.

Výkon:

Existujú aj niektoré pojmy, ako napríklad lineárne vyhľadávanie, spoločný deliteľ a najdôležitejší faktoriál daného čísla, ktoré využíva rekurzívnu implementáciu.

Výhody rekurzie

  • Kód, ktorý poskytujú, je čistý a kompaktný zjednodušením väčšieho komplexného programu. V programovom kóde používa menej premenných.
  • Tu sa zabráni zložitému kódu a vloženému do slučiek.
  • Niektoré časti kódu vyžadujú spätné sledovanie, ktoré je riešené rekurzívne.

Nevýhody rekurzie

  • Vďaka operácii zásobníka všetkých volaní funkcií zaberá viac pamäte.
  • Pri vykonávaní iteračného procesu niekedy vykonáva pomalší výkon. Preto je účinnosť nižšia.
  • Pre začiatočníkov je ťažké porozumieť práci, pretože kód niekedy prechádza do hĺbky. ak vedie k nedostatku miesta a nakoniec spôsobí zlyhanie programu.

záver

Týmto sme diskutovali o tom, ako funkcie c ++ fungujú a definujú rekurzívne. A prekonali sme korešpondenciu a ich výhody a nevýhody rekurzívnych funkcií vo svete programovania. Potom sme pokračovali ukážkou toho, ako sa môže implementovať v C ++ pomocou rekurzívnej definície funkcie. Ďalej sme dospeli k záveru, že rekurzia pomáha v C ++ riešiť problémy v koncepciách dátovej štruktúry, ako sú prechody, triedenie a vyhľadávanie, a môže byť efektívne použitá všade, kde je to potrebné.

Odporúčané články

Toto je sprievodca rekurzívnymi funkciami v C ++. Tu diskutujeme o tom, ako rekurzívna funkcia funguje v C ++, syntax spolu s rôznymi príkladmi a implementáciou kódu. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Čo sú funkcie C ++ Array?
  2. Prehľad funkcií reťazca C ++
  3. Najlepšie kompilátor C ++ (príklady)
  4. Úvod do príkazov C ++
  5. Fibonacciho séria v Jave
  6. Generátor náhodných čísel v Matlabe
  7. Generátor náhodných čísel v C #
  8. Palindróm v C ++
  9. Generátor náhodných čísel v JavaScripte
  10. Prvých 11 funkcií a výhod C ++
  11. Naučte sa typy funkcií polí v PHP

Kategórie: