English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Flow Control

Java Array

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

Обработка исключений Java

Java List

Java Queue (queue)

Java Map collection

Java Set collection

Java Input/Output (I/O)

Java Reader/Writer

Java other topics

Рекурсия Java

In this tutorial, you will learn about Java recursive functions and their advantages and disadvantages.

In Java, calling a methodMethodIt is called a recursive method. And, this process is called recursion.

A physical world example is placing two facing parallel mirrors. Any object between them will be recursively reflected.

How does recursion work?

Java recursion workflow diagram

In the above example, we called the recurse() method from inside the main method. (Normal method call). And, inside the recurse() method, we call the same recurse method again. This is a recursive call.

To stop the recursive call, we need to provide some conditions inside the method. Otherwise, the method will be called indefinitely.

Therefore, we useif ... else statement(or similar method) terminate the recursive call inside the method.

Example: factorial using recursion

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);
    }
}

Output:

4 factorial = 24

В примере выше у нас есть метод factorial(). Его вызывают из метода main(). Параметром передается переменная с числовым значением.

Обратите внимание на следующие строки:

return n * factorial(n - 1);

Метод factorial() вызывает себя. Вначале значение n в методе factorial() равно 4. В следующий раз вызывается factorial() с передачей значения 3. Этот процесс продолжается до тех пор, пока n не станет равным 0.

Когда n равно 0, если-выражение возвращает false, поэтому возвращается 1. В конце результат суммирования передается методу main().

Обработка процесса программы на факториал

Ниже приведена иллюстрация, которая поможет лучше понять, как использовать рекурсию для выполнения программы на факториал.

Программа на факториал с использованием рекурсии

Плюсы и минусы рекурсии

При выполнении рекурсивного вызова на стэк выделяется новый участок памяти для хранения переменных. С каждым возвращением рекурсивного вызова старые переменные и параметры удаляются из стэка. Таким образом, рекурсия обычно использует больше памяти и обычно медленнее.

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