JavaRush /Java блог /Random /В двух словах о рекурсии
vinsler
35 уровень

В двух словах о рекурсии

Статья из группы Random
Что же такое рекурсия в Java, какая-то хрень полная, непонятная, давайте пройдемся.
В двух словах о рекурсии - 1
Пример:

public class Recursion {
        public static void main(String[] args) {
            System.out.println("Изначальный REC ( 15 , 9 )" );
            System.out.println(rec(15,9)); // запускаем sout с возвращаемым функцией [rec] результатом
        }

        static int rec (int m, int n) { // передаем в функцию [rec] 2 числа
            if(m % n == 0) { // если первое число [m] делится на второе число [n] нацело, то возвращаем его
                System.out.println("Окончателное число " + n);
                return n;
            } else {
                // если не делится нацело, то перезапускаем функцию и заносим в него другие аргументы :
                // в качестве первого уже будет второе число [n],
                // а в качестве второго будет остаток от деления первого[m] на второе[n] 15 / 9 = 1 (+ остаток 6)
                System.out.println("Заносим в REC (" + n + " , " + m % n + ")");
                return rec(n,m % n);
            }
        }
Данный код вы можете скопировать и протестить у себя. Описание того, что происходит внутри с переменными: изначально 15, 9 делится 15 / 9 = 1 , остаток 6 если есть остаток, значит запускается по новой функция, но значения уже будут 9, 6 (из остатка) делится 9 / 6 = 1, остаток 3 если есть остаток, значит запускается по новой функция, но значения уже будут 6, 3 (из остатка) делится 6 / 3 = 2, остаток 0 если нет остатка, выводится второе число из функции 3 А теперь разберем все более подробно, для моей бабушки.
  1. Рекурсия в Java - это запуск функции, из самой функции.
  2. При запуске функции, все что было сделано внутри функции стирается и запускается новая функция, с новыми параметрами.
Другими словами, если вы видите слово запуск этой же функции [rec], то берете эту функцию в самом начале ее описания, переносите туда подаваемые параметры и смотрите, что происходит далее. Вот и все обьяснение. Мы запускаем функцию, устанавливаем внутри определенный параметры, при которых или запускается рекурсия или возвращается какой-то результат. Вот и весь секрет. PS: Писал просто из головы, сразу же и помогал другу за одно, поэтому вся критика и доработки только приветствуются. )))
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Джон Дориан Уровень 37
9 мая 2018
"Рекурсия - это всего лишь рекурсия рекурсии" (с)
Viacheslav Уровень 3
9 мая 2018
Не затронуто то, почему рекурсия плоха. Почему можем схватить стэк оверфлоу, с чем связано и как регулируется, на основе каких параметров. Чем заменяется рекурсия? Базовые задачи (числа Фибоначчи), как их лучше сделать (на степике был курс на эту тему + на хабре видел 1 или 2 отличные статьи на тему того, как улучшать такие алгоритмы). Какие прикладные задачи всё таки решаются при помощи рекурсии?