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

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

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

Я хочу сказать, что рекурсия подобна циклу, который запускает один и тот же код снова и снова, пока какое-то конкретное условие не выполнится и рекурсия не остановится, как в цикле.

Одно из основных преимуществ написания рекурсии над циклом заключается в том, что она более удобочитаема, чем оператор цикла.

Как написать рекурсию?

В приведенном ниже примере кода мы вызываем функцию «printHello», которая в строке 7 печатает слово «hello», а затем в строке 8 вызывает саму себя, которая будет выполнять одну и ту же операцию снова и снова — до бесконечного числа раз.

Я использовал слово «бесконечный», но на самом деле он не будет работать и печатать «привет» вечно, потому что на каждом компьютере имеется ограниченный объем памяти. Если бы это был цикл, то использование термина бесконечный было бы актуальным, но рекурсии не работают как цикл, да, они выполняют одну и ту же операцию снова и снова, точно так же, как цикл, но под капотом, они не работают как петля.

Как это работает?

когда какая-либо функция вызывает сама себя, вызывающая функция не завершается и не исчезает из памяти до тех пор, пока вызываемая функция не вернется, и то же самое происходит с вызываемой функцией и так далее. И в приведенном выше коде нет разрыва или знака остановки, который может сказать рекурсии остановиться и вернуться. И именно поэтому, как только память компьютера заполняется вызовами рекурсии, она останавливает выполнение программы и выдает ошибку/исключение переполнения стека. Ваш компьютер использует нечто, известное как стек, для отслеживания вызовов рекурсии, который представляет собой не что иное, как структуру данных.

Как заставить рекурсию остановиться после того, как она будет выполнена определенное количество раз?

Для этого мы используем что-то, известное как базовый случай, который говорит рекурсии остановиться и вернуться.

В приведенном ниже коде мы снова печатаем приветствие, но на этот раз оно будет напечатано только 5 раз.

Почему, потому что, как вы можете видеть в строке 7, мы добавили условие, и если это условие выполняется, мы возвращаемся Или мы говорим, что функция printHello возвращает то, откуда вы пришли, а затем код, который находится в строках 10 и 11, не получит выполняется для этого конкретного вызова. И это условие, которое может остановить рекурсию, называется базовым случаем. Теперь это условие может быть любым, здесь просто проверяется, равно ли «times» 5, если оно возвращается, иначе печатает слово hello и снова вызывает функцию printHello с (times + 1) в качестве аргумента.

Если вы узнали что-то новое из этой статьи, нажмите кнопку «Подписаться»

если (!уже)🚗