В этом руководстве вы узнаете о рекурсивной функции Java, ее преимуществах и недостатках.
В Java метод, который вызывает сам себя, известен как рекурсивный метод. И этот процесс известен как рекурсия.
В качестве примера физического мира можно поместить два параллельных зеркала, обращенных друг к другу. Любой объект между ними будет отражаться рекурсивно.
Как работает рекурсия?
Работа рекурсии Java
В приведенном выше примере мы вызвали recurse()метод изнутри mainметода. (обычный вызов метода). И внутри метода recurse () мы снова вызываем тот же метод рекурсии. Это рекурсивный вызов.
Чтобы остановить рекурсивный вызов, нам нужно предоставить некоторые условия внутри метода. В противном случае метод будет вызываться бесконечно.
Следовательно, мы используем оператор if… else (или аналогичный подход) для завершения рекурсивного вызова внутри метода.
Пример: факториал числа с использованием рекурсии
class Factorial ( static int factorial( int n ) ( if (n != 0) // termination condition return n * factorial(n-1); // recursive call else return 1; ) public static void main(String() args) ( int number = 4, result; result = factorial(number); System.out.println(number + " factorial = " + result); ) )
Выход :
4 факториал = 24
В приведенном выше примере у нас есть метод с именем factorial(). factorial()Вызывается из main()метода. с числовой переменной, переданной в качестве аргумента.
Здесь обратите внимание на утверждение,
return n * factorial(n-1);
factorial()Метод вызывает себя. Изначально значение n внутри равно 4 factorial(). Во время следующего рекурсивного вызова factorial()методу передается 3 . Этот процесс продолжается до тех пор, пока n не станет равным 0.
Когда n равно 0, ifоператор возвращает false, следовательно, возвращается 1. Наконец, накопленный результат передается в main()метод.
Работа факторной программы
Изображение ниже даст вам лучшее представление о том, как выполняется факториальная программа с использованием рекурсии.
Факториальная программа с использованием рекурсии
Преимущества и недостатки рекурсии
Когда выполняется рекурсивный вызов, в стеке выделяются новые места для хранения переменных. Когда каждый рекурсивный вызов возвращается, старые переменные и параметры удаляются из стека. Следовательно, рекурсия обычно использует больше памяти и обычно выполняется медленно.
С другой стороны, рекурсивное решение намного проще и требует меньше времени на написание, отладку и поддержку.
Рекомендуемая литература: каковы преимущества и недостатки рекурсии?








