Введение в рекурсивную функцию в 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 ++, синтаксис, а также различные примеры и реализация кода. Вы также можете посмотреть следующие статьи, чтобы узнать больше -
- Что такое функции массива C ++?
- Обзор строковых функций C ++
- Лучший компилятор C ++ (примеры)
- Введение в C ++ Команды
- Ряд Фибоначчи на Яве
- Генератор случайных чисел в Matlab
- Генератор случайных чисел в C #
- Палиндром в C ++
- Генератор случайных чисел в JavaScript
- Лучшие 11 функций и преимуществ C ++
- Изучите типы функций массива в PHP