Увод у рекурзивну функцију у Ц ++

За почетак с рекурзивном функцијом у Ц ++, већ смо познавали основну идеју иза Ц ++ функција која укључује дефиницију функције да бисте позвали и друге функције. Овај чланак покрива концепт рекурзивне дефиниције, концепт алата за игру у математици и програмској логици. Познати пример укључује фактороријум броја, зброј природних бројева 'н' итд. Функција која сама по себи назива позната је као рекурзивна функција. Они су само функција која се опетовано позива. Рекурзија има алат за решавање проблема, где веће проблеме дели на једноставне задатке и појединачно ради тако да слиједи појединачни редослијед.

Концепт структуре података као што су претраживање, сортирање, кретање дрвећа користи рекурзивну функцију за његова решења. Ова техника програмирања олакшава код. Итерација и рекурзија обављају исти поступак као и понављање кода, али разлика у рекурзији је што они извршавају одређени део са самом основном функцијом. У овом чланку ћемо детаљно са примером говорити о важности рекурзије и њиховом радном процесу.

Синтакса рекурзивне функције у Ц ++

Општа синтакса рекурзивне функције у ц ++ је дата као:

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

Како дјелује рекурзивна функција у Ц ++?

Рекурзија изводи понављање на позивима функција и зауставља извршење кад основни случај постане истинит. У рекурзивној функцији треба дефинирати основни случај да би се избјегла порука о погрешци прелијевања снопа. Ако није дефинисан ниједан основни случај, то води до бесконачне рекурзије. Када се функција назове, сваки пут их гура у сноп за резервне ресурсе за сваки позив за понављање. Даје најбоље у преласку дрвећа. Постоје две различите врсте рекурзије: Директна и индиректна рекурзија.

Директна рекурзивна: илустрација

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

Горњи формат је директни рекурзивни позив где се одмах позива / позива сам. Размотримо другу врсту која се зове индиректна рекурзија и укључује други позив функције. Може се видети на доњој слици:

Индиректна рекурзивна: Илустрација

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

Примери рекурзивне функције у Ц ++

У доњем програму можете видети извршење програма за који сам обезбедио основни основни услов. Понекад употреба иф-елсе стања у рекурзији помаже у спречавању бесконачне рекурзије. Процес кода се врши делимичним раствором на међупредмету и они се комбинују до коначног решења при репној рекурзији.

Пример # 1

Ево једноставног примера Фибонаццијеве серије броја. Програм у наставку укључује позив рекурзивној функцији која је дефинисана као фиб (инт н) која узима унос од корисника и смешта га у 'н'. Следећи корак укључује преузимање петље за генерисање термина који се прослеђује функцији фиб () и враћа Фибонаццијев низ. Основни случај поставља се наредбом иф провјером броја = 1 или 2 за испис прве двије вриједности. на крају, ова рекурзивна функција се наставља са петљом за штампање серије 1, 1, 2.

Шифра:

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

Излаз:

Пример бр. 2

Провера броја палиндрома помоћу рекурзивне функције.

Шифра:

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

Излаз:

Пример бр. 3

Програм са генератором случајних бројева

Шифра:

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

Горњи програм илуструје генератор случајних бројева када се коцкице насумично котрљају. Изводи се позивањем функције ранд1 (инт н) и генерише 0 до н-1 бројеве. и подешавање вредности семена са нулом (без адресе). На пример, ако унесемо као 4, то баца могућност коцкица као 5, 4, 1, 2.

Излаз:

Постоје и неки појмови попут линеарне претраге, заједничког дељења и најважнијег фактора одређеног броја који користи рекурзивну имплементацију.

Прос за рекурзију

  • Код који им пружа је чист и компактан поједностављујући већи сложени програм. Користи мање варијабли у програмском коду.
  • Овде се избегавају сложени код и угнијежђене петље.
  • Неки део кода захтева повратно снимање које се решава рекурзивно.

Слабости рекурзије

  • Потребна је већа доделитев меморије због рада скупа свих позива функција.
  • Понекад дјелује спорије док извршава поступак понављања. Због тога је ефикасност мања.
  • За почетнике је тешко разумети рад јер кода понекад иде у детаље. ако доведе до ван простора и доведе до краха програма.

Закључак

Овим смо разговарали о начину функционисања ц ++ и дефинисању рекурзивних. И прошли смо кроз преписку и њихове предности и недостатке рекурзивне функције у свету програмирања. Затим смо наставили показујући како се може имплементирати у Ц ++ користећи рекурзивну дефиницију функција. Надаље, закључујемо да рекурзија помаже у Ц ++ да ријеши проблеме у концептима структуре података као што су путовање, сортирање и претраживање и може се ефикасно користити гдје год је потребно.

Препоручени чланци

Ово је водич за рекурзивну функцију у Ц ++. Овде смо расправљали о томе како рекурзивна функција делује у Ц ++, синтакси, заједно са различитим примерима и имплементацијом кода. Такође можете погледати следеће чланке да бисте сазнали више -

  1. Шта су Ц ++ функције матрице?
  2. Преглед функција Ц ++ стринга
  3. Најбољи компајлер Ц ++ (примери)
  4. Увод у Ц ++ команде
  5. Серија Фибонацције на Јави
  6. Генератор случајних бројева у Матлабу
  7. Генератор случајних бројева у Ц #
  8. Палиндроме у Ц ++
  9. Генератор случајних бројева у ЈаваСцрипт-у
  10. Топ 11 функција и предности Ц ++
  11. Научите врсте функција матрице у ПХП-у

Категорија: