Рекурсия в примере Java | Учебное пособие по Java-рекурсии

Рекурсия в Java — это процесс, в котором метод вызывает себя снова и снова, а метод, который вызывает сам себя, известен как рекурсивный метод. В примере в реальном времени это похоже на то, что вы стоите между двумя параллельными зеркалами, и изображение формируется многократно. Метод в 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.

# Разница между хвостовой и нехвостой рекурсией

Рекурсивная функция является хвостовой рекурсивной, когда рекурсивный вызов является последним, что выполняется функцией. Пожалуйста, обратитесь к статье о хвостовой рекурсии для получения подробной информации.

# Каковы недостатки рекурсивного программирования перед итеративным программированием?

И рекурсивное, и итеративное программы обладают одинаковой способностью решать проблемы, например, каждая рекурсивная программа может быть написана итеративно, и наоборот.

Рекурсивная программа имеет более значительные требования к пространству, чем итеративная программа, поскольку все функции остаются в стеке до тех пор, пока не будет достигнут базовый вариант. Кроме того, он требует более существенных временных затрат из-за вызовов функций и накладных расходов на возврат.

# Каковы преимущества рекурсивного программирования перед итеративным программированием

Рекурсия обеспечивает ясный и простой способ написания кода. Некоторые проблемы по своей сути являются рекурсивными проблемами, и для таких проблем рекомендуется писать рекурсивный код..

Мы можем писать такие коды также итеративно с помощью структуры данных стека.

# Некоторые другие примеры рекурсий

  1. Ханойская башня
  2. НОД заданных чисел
  3. DFS графов
  4. Предварительный, последующий и упорядоченный обход дерева
  5. Quicksort, MergeSort

# Недостатки рекурсии

  1. Для хранения переменных метода требуется много памяти. Поскольку метод вызывает многократно и каждый раз, переменная выделяется новой памятью в стеке.
  2. Постоянный вызов снижает производительность.
  3. Среднему программисту трудно понять, как работает рекурсия.

Наконец, урок по рекурсии в Java-примере завершен.

Оцените статью
nanomode.ru
Добавить комментарий