Чтобы понять рекурсию, вы должны сначала понять рекурсию

float _pow_recursion(float x, float y)
{
    if (y == 0)
        return (1);
    if (y < 0)
        return (_pow_recursion(x, y + 1) / x);
    printf("Current x, y: %f, %f\n", x, y);
    return (_pow_recursion(x, y - 1) * x);
}

Рекурсия может быть сложной концепцией для понимания, но подумайте о ней как о стеке блоков, которые всплывают, чтобы вернуть результат. Приведенная выше программа будет нашим рекурсивным примером для изучения рекурсии. Обратите внимание на условие выхода, которое равно if (y == 0) return 1; . Это означает, что когда y станет равным 0, программа завершит работу и вернет вам результат своей рекурсии. Следующий фрагмент кода, на который стоит обратить внимание, это return (_pow_recursion(x, y - 1) * x); , так наша программа будет рекурсивно вызывать себя, пока не достигнет условия выхода, чтобы выскочить и дать наш результат. Лучшее изображение будет нарисовано ниже:

int main(void)
{
    int res = 0;
    res = _pow_recursion(2, 5);
    printf("Result = %d\n", res);
    return (0);
}

Мы будем использовать этот вход в нашей мощной рекурсивной программе, установив x = 2 и y = 5 , изображение под кодом показывает, как выглядит стек, когда он вычисляет рекурсивную программу. Начиная снизу, мы видим, что он хочет вернуть 2 * 2, но не может этого сделать, пока не узнает, что такое 5 - 1. Таким образом, он добавляется в стек после вычисления того, что такое 5 - 1, и становится 4 - 1. Это продолжается до тех пор, пока не будет достигнуто условие выхода в самом верху, то есть if (y == 0) return (1); . В этой точке стека он, наконец, может вычислить ожидающие умножения, спускаясь по стеку:

Теперь с вершины стека он выходит и спускается к 2 * 2, что равно 4. Теперь он держит 4 , но не может вернуться, пока не опустится из-за ожидающего умножения. Итак, он делает 4 * 2 , и теперь он содержит 8 , и так далее, пока не дойдет до последнего стека, где он вернет то, что он держит; который 32 . Ниже приведена вся программа, которая была указана в этой статье:

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

Источники: