Введение в рекурсивную функцию в 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'. Следующий шаг включает в себя использование цикла for для генерации члена, который передается функции 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 ++, синтаксис, а также различные примеры и реализация кода. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Что такое функции массива C ++?
  2. Обзор строковых функций C ++
  3. Лучший компилятор C ++ (примеры)
  4. Введение в C ++ Команды
  5. Ряд Фибоначчи на Яве
  6. Генератор случайных чисел в Matlab
  7. Генератор случайных чисел в C #
  8. Палиндром в C ++
  9. Генератор случайных чисел в JavaScript
  10. Лучшие 11 функций и преимуществ C ++
  11. Изучите типы функций массива в PHP