Рекурсию может быть трудно понять, поэтому мы рассмотрим рекурсивную функцию и попытаемся понять, что происходит.

int _pow_recursion(int x, int y)
{
    if (y < 0)
    {
        return (-1);
    }
    if (y == 0)
    {
        return (1);
    }
    return (_pow_recursion(x, y - 1) * x);
}

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

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