Wprowadzenie do funkcji rekurencyjnej w C ++

Aby zacząć od funkcji rekurencyjnej w C ++, znaliśmy już podstawową ideę funkcji C ++, która obejmuje definicję funkcji do wywoływania również innych funkcji. I ten artykuł obejmuje koncepcję definicji rekurencyjnej, koncepcję narzędzia gry w matematyce i logice programowania. Znany przykład obejmuje silnię liczby, sumę liczb naturalnych „n” itp. Funkcja, która sama wywołuje, jest znana jako funkcja rekurencyjna. Są tylko funkcją, która jest wielokrotnie wywoływana. Recursion ma narzędzie do rozwiązywania problemów, w którym większe problemy dzieli na proste zadania i opracowuje je indywidualnie, aby zachować indywidualną sekwencję.

Pojęcia dotyczące struktur danych, takie jak wyszukiwanie, sortowanie, przechodzenie do drzewa, wykorzystują funkcję rekurencyjną w swoich rozwiązaniach. Ta technika programowania ułatwia kodowanie. Zarówno iteracja, jak i rekurencja wykonują ten sam proces, co powtórzenie kodu, ale różnica w rekurencji polega na tym, że wykonują one określoną część za pomocą samej funkcji podstawowej. W tym artykule omówimy znaczenie rekurencji i ich proces pracy ze szczegółowym przykładem.

Składnia funkcji rekurencyjnej w C ++

Ogólna składnia funkcji rekurencyjnej w c ++ jest podana jako:

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

Jak działa funkcja rekurencyjna w C ++?

Rekurencja wykonuje powtórzenie wywołań funkcji i zatrzymuje wykonywanie, gdy przypadek podstawowy stanie się prawdziwy. Warunek przypadku podstawowego powinien zostać zdefiniowany w funkcji rekurencyjnej, aby uniknąć komunikatu o błędzie przepełnienia stosu. Jeśli nie zdefiniowano żadnego przypadku podstawowego, prowadzi to do nieskończonej rekurencji. Gdy funkcja jest wywoływana, za każdym razem popycha ją do stosu w celu zarezerwowania zasobów dla każdego wywołania powtórzenia. To daje najlepsze w przemierzaniu drzew. Istnieją dwa różne typy rekurencji: rekurencja bezpośrednia i pośrednia.

Bezpośredni rekurencyjny: ilustracja

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

Powyższy format to bezpośrednie wywołanie rekurencyjne, w którym wywołuje natychmiast / wywołuje samo. Rozważ drugi typ zwany pośrednią rekurencją, który obejmuje inne wywołanie funkcji. Można to zobaczyć na poniższej ilustracji:

Pośrednie rekurencyjne: ilustracja

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

Przykłady funkcji rekurencyjnej w C ++

W poniższym programie możesz zobaczyć wykonanie programu, który dostarczyłem z domyślnym warunkiem podstawowym. Czasami użycie warunku if-else w rekursji pomaga zapobiec nieskończonej rekurencji. Proces kodu jest wykonywany z częściowym rozwiązaniem na półprodukcie i są one łączone z końcowym rozwiązaniem przy rekurencji ogona.

Przykład 1

Oto prosty przykład szeregu liczb Fibonacciego. Poniższy program zawiera wywołanie funkcji rekurencyjnej zdefiniowanej jako fib (int n), która pobiera dane wejściowe od użytkownika i zapisuje je w 'n'. Kolejny krok obejmuje przejęcie pętli for w celu wygenerowania terminu, który jest przekazywany do funkcji fib () i zwraca ciąg Fibonacciego. Przypadek podstawowy ustawia się za pomocą instrukcji if, sprawdzając liczbę = 1 lub 2, aby wydrukować dwie pierwsze wartości. wreszcie ta funkcja rekurencyjna działa wraz z pętlą do wydrukowania serii 1, 1, 2.

Kod:

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

Wynik:

Przykład nr 2

Sprawdzanie numeru palindromu za pomocą funkcji rekurencyjnej.

Kod:

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

Wynik:

Przykład nr 3

Program z generatorem liczb losowych.

Kod:

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

Powyższy program ilustruje generator liczb losowych, gdy kostka jest rzucana losowo. Jest to wykonywane przez wywołanie funkcji rand1 (int n) i generuje liczby od 0 do n-1. i ustawienie wartości początkowej z null (bez adresu). Na przykład, jeśli wprowadzimy jako 4, rzuca możliwość kostki jako 5, 4, 1, 2.

Wynik:

Istnieją również pewne pojęcia, takie jak wyszukiwanie liniowe, wspólny dzielnik i najważniejszy czynnik silniejszy dla danej liczby, która wykorzystuje implementację rekurencyjną.

Zalety rekurencji

  • Dostarczony przez nich kod jest czysty i zwarty dzięki uproszczeniu większego złożonego programu. Używa mniej zmiennych w kodzie programu.
  • Unika się tutaj złożonego kodu i zagnieżdżenia pętli.
  • Część kodu wymaga cofania, które jest rozwiązywane rekurencyjnie.

Wady rekurencji

  • Zajmuje więcej alokacji pamięci z powodu operacji stosu wszystkich wywołań funkcji.
  • Czasami działa wolniej podczas wykonywania procesu iteracji. Dlatego wydajność jest mniejsza.
  • Początkującym trudno jest zrozumieć działanie, ponieważ czasami kod jest dogłębny. jeśli prowadzi do braku miejsca i ostatecznie powoduje awarie programu.

Wniosek

Dzięki temu omówiliśmy działanie funkcji c ++ i zdefiniowaliśmy rekurencyjnie. Przeanalizowaliśmy korespondencję oraz ich zalety i wady funkcji rekurencyjnej w świecie programowania. Następnie kontynuowaliśmy, pokazując, jak można go zaimplementować w C ++ przy użyciu definicji funkcji rekurencyjnej. Ponadto dochodzimy do wniosku, że rekurencja pomaga w C ++ w rozwiązywaniu problemów związanych z koncepcjami struktury danych, takimi jak przechodzenie, sortowanie i wyszukiwanie, i może być skutecznie używana wszędzie tam, gdzie jest potrzebna.

Polecane artykuły

Jest to przewodnik po funkcji rekurencyjnej w C ++. Tutaj omawiamy działanie funkcji rekurencyjnej w C ++, składni wraz z różnymi przykładami i implementacją kodu. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Co to są funkcje macierzy C ++?
  2. Przegląd funkcji łańcuchowych C ++
  3. Najlepszy kompilator C ++ (przykłady)
  4. Wprowadzenie do poleceń C ++
  5. Seria Fibonacciego w Javie
  6. Generator liczb losowych w Matlabie
  7. Generator liczb losowych w C #
  8. Palindrom w C ++
  9. Generator liczb losowych w JavaScript
  10. 11 najważniejszych funkcji i zalet C ++
  11. Poznaj typy funkcji tablicowych w PHP