Учебники по Java

Ява ГЛАВНАЯ Введение в Java Начало работы с Java Синтаксис Java Java-комментарии Java-переменные Типы данных Java Приведение типов Java Операторы Java Java-строки Java-математика Логические значения Java Java, если...иначе Java-переключатель Java-цикл во время выполнения Java для цикла Перерыв/продолжение Java Массивы Java

Java-методы

Java-методы Параметры метода Java Перегрузка метода Java Область применения Java Java-рекурсия

Java-классы

Java ООП Классы/объекты Java Атрибуты класса Java Методы класса Java Конструкторы Java Модификаторы Java Инкапсуляция Java Java-пакеты/API Наследование Java Java-полиморфизм Внутренние классы Java Java-абстракция Java-интерфейс Перечисления Java Пользовательский ввод Java Дата Java Список массивов Java Связанный список Java Java HashMap Набор хэшей для Java Java-итератор Классы-оболочки Java Исключения Java Java регулярное выражение Java-потоки Java-лямбда

Обработка файлов Java

Java-файлы Создание/запись файлов Java Файлы чтения Java Java Удалить файлы

Java Как

Добавить два числа

Справочник по Java

Ключевые слова Java Строковые методы Java Java математические методы

Примеры Java

Примеры Java Компилятор Java Java-упражнения Java-викторина Java-сертификат


Java -рекурсия


Java-рекурсия

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

Рекурсию может быть немного сложно понять. Лучший способ понять, как это работает, — это поэкспериментировать.


Пример рекурсии

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

Пример

Используйте рекурсию, чтобы сложить все числа до 10.

public class Main {
  public static void main(String[] args) {
    int result = sum(10);
    System.out.println(result);
  }
  public static int sum(int k) {
    if (k > 0) {
      return k + sum(k - 1);
    } else {
      return 0;
    }
  }
}

Объяснение примера

Когда sum()функция вызывается, она добавляет параметр kк сумме всех чисел меньше чем kи возвращает результат. Когда k становится равным 0, функция просто возвращает 0. При запуске программа выполняет следующие шаги:

10 + сумма(9)
10 + (9 + сумма(8) )
10 + (9 + (8 + сумма(7)) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + сумма(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

Поскольку функция не вызывает себя, когда kравно 0, программа останавливается на этом и возвращает результат.


Состояние остановки

Точно так же, как циклы могут столкнуться с проблемой бесконечного зацикливания, рекурсивные функции могут столкнуться с проблемой бесконечной рекурсии. Бесконечная рекурсия — это когда функция никогда не перестает вызывать себя. Каждая рекурсивная функция должна иметь условие остановки, то есть условие, при котором функция прекращает вызывать себя. В предыдущем примере условие остановки возникает, когда параметр kстановится равным 0.

Полезно увидеть множество различных примеров, чтобы лучше понять концепцию. В этом примере функция добавляет диапазон чисел между началом и концом. Условием остановки для этой рекурсивной функции является то, что end не больше, чем start :

Пример

Используйте рекурсию, чтобы сложить все числа от 5 до 10.

public class Main {
  public static void main(String[] args) {
    int result = sum(5, 10);
    System.out.println(result);
  }
  public static int sum(int start, int end) {
    if (end > start) {
      return end + sum(start, end - 1);
    } else {
      return end;
    }
  }
}