Вступ до рекурсивної функції в C ++

Для початку з рекурсивною функцією в C ++, ми вже знали основну ідею функцій C ++, яка включає визначення функції для виклику інших функцій. І ця стаття охоплює поняття, що стоїть за рекурсивним визначенням, концепцією ігрового інструменту в математиці та логіці програмування. Знайомий приклад включає факториальне число, суму натуральних чисел 'n' тощо. Функція, яка сама по собі викликає, називається рекурсивною функцією. Вони - лише функція, яка викликається неодноразово. Рекурсія отримала інструмент для вирішення проблем, де вона ділить більші проблеми на прості завдання та розробляє індивідуально для дотримання індивідуальної послідовності.

Поняття структури даних, такі як пошук, сортування, обхід дерева, використовують рекурсивну функцію для її рішення. Ця методика програмування полегшує код. І ітерація, і рекурсія виконують той самий процес, що і повторення коду, але різниця в рекурсії полягає в тому, що вони виконують конкретну частину з базовою функцією. У цій статті ми детально розглянемо важливість рекурсії та їх робочий процес на прикладі.

Синтаксис рекурсивної функції в C ++

Загальний синтаксис рекурсивної функції в c ++ задається як:

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

Як працює рекурсивна функція в C ++?

Рекурсія виконує повторення на викликах функції, і вона зупиняє виконання, коли базовий випадок стає істинним. У рекурсивній функції слід визначити базовий випадок, щоб уникнути повідомлення про помилку переповнення стека. Якщо базовий випадок не визначений, це призводить до нескінченної рекурсії. Коли функція викликається, вона штовхає їх у стек кожного разу для резервування ресурсів для кожного виклику повторення. Це дає найкраще в обході дерев. Існує два різних типи рекурсії: Пряма і непряма рекурсія.

Прямий рекурсивний: ілюстрація

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

Приклади рекурсивної функції в C ++

У нижченаведеній програмі ви можете побачити виконання програми, яку я забезпечив базовою умовою за замовчуванням. Іноді використання умови реквізиту if-else допомагає запобігти нескінченну рекурсію. Процес коду проводиться з частковим розчином на проміжному рівні, і вони об'єднуються до кінцевого розчину при хвостовій рекурсії.

Приклад №1

Ось простий приклад серії Фібоначчі числа. Нижченаведена програма включає в себе виклик до рекурсивної функції, визначеної як fib (int n), яка приймає дані від користувача та зберігає їх у 'n'. Наступний крок включає прийняття циклу для створення терміна, який передається у функцію fib (), і повертає ряд Фібоначчі. Базовий регістр встановлюється за допомогою оператора if, перевіряючи число = 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;
)

Вищеописана програма ілюструє генератор випадкових чисел, коли кістки випадковим чином перекочуються. Він виконується викликом функції rand1 (int n) і генерує від 0 до n-1 чисел. та встановлення значення насіння з нулем (без адреси). Наприклад, якщо ми вводимо як 4, це дає можливість кістки як 5, 4, 1, 2.

Вихід:

Існують також такі поняття, як лінійний пошук, спільний дільник і найважливіший фактор даного числа, який використовує рекурсивну реалізацію.

Плюси рекурсії

  • Код, наданий ними, чистий і компактний, спрощуючи більшу складну програму. Використовує менше змінних у програмному коді.
  • Тут уникнути складного коду та вкладених циклів.
  • Деяка частина коду вимагає зворотного відстеження, яке вирішується рекурсивно.

Мінуси рекурсії

  • Займається більше розподілу пам’яті завдяки роботі стека всіх викликів функцій.
  • Іноді воно працює повільніше, виконуючи процес ітерації. Тому ефективність менша.
  • Початківцям важко зрозуміти роботу, оскільки іноді код поглиблюється. якщо це призводить до виходу з простору і спричиняє зрештою збої програми.

Висновок

З цим ми обговорили, як функціонують функції c ++ та визначаються рекурсивно. І ми пережили листування та їх плюси та мінуси рекурсивної функції у світі програмування. Потім ми продовжили, показавши, як це може бути реалізовано в C ++, використовуючи рекурсивне визначення функції. Далі ми робимо висновок, що рекурсія допомагає C ++ вирішувати проблеми в таких поняттях структури даних, як обхід, сортування та пошук, і їх можна ефективно використовувати там, де це потрібно.

Рекомендовані статті

Це посібник з рекурсивної функції в C ++. Тут ми обговорюємо, як працює рекурсивна функція в C ++, синтаксисі разом з різними прикладами та реалізацією коду. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Що таке функції масиву C ++?
  2. Огляд строкових функцій C ++
  3. Найкращий компілятор C ++ (приклади)
  4. Вступ до C ++ команд
  5. Серія Фібоначчі на Яві
  6. Генератор випадкових чисел у Matlab
  7. Генератор випадкових чисел у C #
  8. Паліндром у С ++
  9. Генератор випадкових чисел у JavaScript
  10. Топ-11 особливостей та переваг C ++
  11. Дізнайтеся про типи функцій масиву в PHP