May 15, 2020

Рекурсия

Привет ребят, сегодня мы с вами поговорим об очень важном моменте в программировании - рекурсии.

Рекурсивная функция, представляет собой функцию, которая вызывает саму себя.

Вот пример такой функции( подсчет факториала ):

static int Factorial(int x)
        {
            if (x == 0 || x == 1)
            {
                return 1;
            }
            else
            {
                return x * Factorial(x - 1);
            }
        }

И так, давайте разберемся что здесь происходит.

  • Первое условие это "Базовый случай". В данном примере если число равно 0 или 1, нам не нужно его высчитывать, а можно сразу вывести ответ
  • А вот второе, это именно рекурсивный случай. То есть если число больше 1, нам нужно данное нам число умножить на ту же функцию, только передать в нее число на единицу меньше.

Стек вызовов

Теперь хочу поднять тему максимально тесно связанную с рекурсией, а именно стек вызовов.

Вернемся к примеру выше, при подсчете факториала 5 нам понадобится вызвать функцию 5 раз. И пока не закончится последний вызов( который на как раз токи выдаст нам 120 ), первый будет храниться в активной памяти программы.

То есть когда вы рекурсивно вызываете функцию, то функция "вызыватель" приостанавливается в частично завершенном состоянии. А вместе с ней и переменные от этих функций

Ну на сегодня это все, постарался разобрать и более менее понятно объяснить эту тему

Удачи, программисты!