递归如何回归?

时间:2014-11-12 20:52:23

标签: recursion

我正在努力更深入地理解递归,并且我正在努力为什么它的工作方式如此。我知道这个函数返回前一个返回的平方(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岁?我理解函数返回的是什么,但我仍然坚持到达那里的过程。

1 个答案:

答案 0 :(得分:3)

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

call p1a(3)
    call p1a(2)
        call p1a(1)
            return 2
        return pow(2, 2)
    return pow(4, 2)

所以最后的return返回值16。