Recursion 递归是如何工作的?

Recursion 递归是如何工作的?,recursion,Recursion,我正在努力更深入地理解递归,我正在努力研究它为什么会这样工作。我知道这个函数返回上一次返回的平方(2、4、16、256等),但我想知道它是如何得到答案的 我对递归的理解是它会迭代回基本情况,但这让我相信它最终会返回基本情况。它是如何恢复到每次都返回新内容的 int p1a(int num) { if (num == 1) { return 2; } else { return pow(p1a(num-1), 2); } } 这里有一个我的想法的例子 num =

我正在努力更深入地理解递归,我正在努力研究它为什么会这样工作。我知道这个函数返回上一次返回的平方(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岁的?我理解函数返回的内容,但我一直在做这个过程。

您考虑的是线性步骤,而执行实际上是嵌套的(由缩进表示):


因此,最后的
返回值
返回值16。

虽然这是一个好的CS问题,但不适合如此-理解CS概念应该在特定于该主题的站点上完成。因此,操作方法是解决您的问题,而不是向您解释如何创建它们:)要了解递归中发生了什么,将对递归函数的每次调用视为对唯一函数的调用是很有帮助的。换句话说,在第一次传递时,您调用
p1a
,然后在下一次传递时,您调用
p1b
,然后调用
p1c
,依此类推。现在,你的思想不再会反复出现混乱。这只是一系列函数调用。
call p1a(3)
    call p1a(2)
        call p1a(1)
            return 2
        return pow(2, 2)
    return pow(4, 2)