Pascal4eg

 Java | Фишки и трюки

Рекурсия

public class Factorial {
    public static void main(String[] args) {
        int num = 6;
        long factorial = factorial(num);
        System.out.println("Factorial of " + num + " = " + factorial);
        // Factorial of 6 = 720
    }

    /**
     * Вычисляет факториал переданного числа
     * @param num значение для которого нужно вычислить факториал
     * @return результат
     */
    public static long factorial(int num) {
        if (num == 1) {
            return 1;
        }
        return num * factorial(num - 1);
    }
}

🔁 Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.

В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия).

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

Методы в Java работают с использованием стека. Каждый раз, когда вызывается метод, он помещается на вершину стека и удаляется после выполнения. Если вложенные вызовы методов происходят слишком глубоко, стек может переполниться, и тогда Java выбрасывает StackOverflowError.

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

Аргумент JVM -Xss задаёт размер стэка. Например, -Xss2048k задает размер стека 2 МБ.