Рекурсия в Java — это процесс, в котором метод вызывает себя снова и снова, а метод, который вызывает сам себя, известен как рекурсивный метод. В примере в реальном времени это похоже на то, что вы стоите между двумя параллельными зеркалами, и изображение формируется многократно. Метод в Java, который вызывает сам себя, называется рекурсивным методом. Это делает код компактным, но сложным для понимания.
- Пример рекурсии в Java
- # Факториальная программа числа
- #Explanation
- # Процесс выполнения
- # Ряд Фибоначчи Программа на Java
- # Программа бесконечной рекурсии в Java
- # Рекурсия с бесконечным временем
- #Difference ч/б Прямая и косвенная рекурсия в Java
- Прямая рекурсия
- # Непрямая рекурсия
- # Как конкретная проблема решается с помощью рекурсии
- # Разница между хвостовой и нехвостой рекурсией
- # Некоторые другие примеры рекурсий
- # Недостатки рекурсии
Пример рекурсии в Java
В рекурсивной программе решение предоставляется базовый вариант, а решение более крупной проблемы выражается в терминах более мелких проблем.
См. следующий синтаксис.
return_type имя_метода (список-аргументов) {//утверждения имя_метода (список-аргументов); /* непрерывный вызов метода */}
Давайте посмотрим на пример рекурсии в java.
# Факториальная программа числа
См. следующую программу факториального числа на Java.
class Factorial {static int fact (int n) {if (n == 1) return 1; иначе return (n * fact (n - 1)); } public static void main (String ... args) {System.out.println ("Факториал числа 6 равен =" + fact (6)); }}
См. следующий результат.
#Explanation
В приведенном выше примере факт функция вызывает себя снова и снова. Как факт (6) вызывает факт (5), после этого факт (5) вызывает факт (4) и так далее до факта (1).
# Процесс выполнения
Факт (6) |
Fact(5) |
Факт (4) |
Факт (3) |
Факт (2) |
Факт (1) |
return 1
return 2 * 1 = 2
return 3 * 2 * 1 = 6
return 4 * 3 * 2 * 1 = 24
return 5 * 4 * 3 * 2 * 1 = 120
return 6 * 5 * 4 * 3 * 2 * 1 = 720
# Ряд Фибоначчи Программа на Java
Это ряд, в котором следующий член является суммой двух предыдущих членов. Он начинается с 0, 1 и так далее.
См. Следующую программу.
class fibonacci {public static void main (String ... args) {int n = 9; int a1 = 0, a2 = 1; System.out.print ("первый" + n + "термины:"); для (int я = 1; яСм. следующий результат.
![]()
# Программа бесконечной рекурсии в Java
В этой программе метод называется бесконечным временем. См. Следующий код.
class infinite {static void v () {System.out.println ("appdividend"); v (); } public static void main (String ... args) {v (); }}См. следующий результат.
![]()
# Рекурсия с бесконечным временем
В этой программе метод вызывается конечное число раз, как в факториале числа и ряда Фибоначчи. .
конечный класс {public static void main (String ... args) {num (1); } static void num (int n) {System.out.print (n + ""); если (n == 3) возврат; число (п + 1); }}См. следующий результат.
![]()
#Difference ч/б Прямая и косвенная рекурсия в Java
Прямая рекурсия
Прямая рекурсия имеет место, когда метод вызывает себя «напрямую» в своем собственном теле. Косвенная рекурсия, не более одного метода может быть вызвано отдельно.
См. Следующий пример кода.
int sum () {…… int sum (); }# Непрямая рекурсия
Косвенная рекурсия имеет место, когда метод вызывает другой метод, и этот метод вызывает предыдущий метод обратно . Предположим, что метод A вызывает метод B, а метод B снова вызывает метод A, это называется косвенной рекурсией. См. Следующий пример.
int B () {…… int A ();} int A () {…… int B ();}# Как конкретная проблема решается с помощью рекурсии
Идея состоит в том, чтобы представить проблему в терминах одной или нескольких меньших проблем и добавить одно или несколько базовых условий, которые остановить рекурсию.
Например, мы вычисляем факториал n, если мы знаем факториал (n-1). Базовым случаем для факториала будет n = 0. Мы возвращаем 1, когда n = 0.
# Разница между хвостовой и нехвостой рекурсией
Рекурсивная функция является хвостовой рекурсивной, когда рекурсивный вызов является последним, что выполняется функцией. Пожалуйста, обратитесь к статье о хвостовой рекурсии для получения подробной информации.
# Каковы недостатки рекурсивного программирования перед итеративным программированием?
И рекурсивное, и итеративное программы обладают одинаковой способностью решать проблемы, например, каждая рекурсивная программа может быть написана итеративно, и наоборот.
Рекурсивная программа имеет более значительные требования к пространству, чем итеративная программа, поскольку все функции остаются в стеке до тех пор, пока не будет достигнут базовый вариант. Кроме того, он требует более существенных временных затрат из-за вызовов функций и накладных расходов на возврат.
# Каковы преимущества рекурсивного программирования перед итеративным программированием
Рекурсия обеспечивает ясный и простой способ написания кода. Некоторые проблемы по своей сути являются рекурсивными проблемами, и для таких проблем рекомендуется писать рекурсивный код..
Мы можем писать такие коды также итеративно с помощью структуры данных стека.
# Некоторые другие примеры рекурсий
- Ханойская башня
- НОД заданных чисел
- DFS графов
- Предварительный, последующий и упорядоченный обход дерева
- Quicksort, MergeSort
# Недостатки рекурсии
- Для хранения переменных метода требуется много памяти. Поскольку метод вызывает многократно и каждый раз, переменная выделяется новой памятью в стеке.
- Постоянный вызов снижает производительность.
- Среднему программисту трудно понять, как работает рекурсия.
Наконец, урок по рекурсии в Java-примере завершен.