Я работаю, чтобы понять рекурсию более подробно, и я борюсь с ПОЧЕМУ она работает так, как она. Я знаю, что эта функция возвращает квадрат предыдущего возврата (2, 4, 16, 256 и т. Д.), Но мне интересно, как он получает ответ.Как рекурсия работает?
Мое понимание рекурсии состоит в том, что она итерации возвращается к базовому корпусу, но это заставляет меня поверить, что в конечном итоге он всегда вернет базовый случай. Как он работает, чтобы вернуть что-то новое каждый раз?
int p1a(int num) {
if (num == 1) { return 2; }
else {
return pow(p1a(num-1), 2);
}
}
Вот пример моего мышления
num = 3
passes through the base case and hits pow(p1a(num-1), 2)
moves back to the start
again passes through the base case and hits pow(p1a(num-1), 2)
at this point, num = 1, so it would return 2
Как это работает свой путь обратно вернуть 16? Я понимаю, что функция возвращает, но я застрял в процессе получения там.
Хотя хороший CS вопрос, это не подходит для SO - понимание концепций CS должно выполняться на сайте, специфичном для этого объекта. SO Modus Operandi должен решить ваши проблемы, а не объяснять вам, как их создавать :) – KevinDTimm
Чтобы представить, что происходит в рекурсии, полезно просмотреть каждый вызов рекурсивной функции как вызов уникальной функции. Другими словами, на первом проходе вы вызываете 'p1a', затем на следующем проходе вы вызываете' p1b', затем 'p1c' и т. Д. Теперь нет рекурсии, чтобы мутить ваше мышление. Это всего лишь цепочка вызовов функций. –