Чтобы понять рекурсию, вы должны сначала понять рекурсию
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
. Ниже приведена вся программа, которая была указана в этой статье:
В заключение, если вы думаете о рекурсии, находясь в стеке, как на изображениях выше; может быть легче понять концепцию того, как это работает. Рекурсия создает стек до тех пор, пока не достигнет условия выхода, а затем извлекает стек сверху вниз (снизу), удерживая возвращаемое значение. Как только он возвращается к началу стека, он возвращает свое значение, и программа завершается.
Источники: