我正在努力更深入地理解递归,并且我正在努力为什么它的工作方式如此。我知道这个函数返回前一个返回的平方(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岁?我理解函数返回的是什么,但我仍然坚持到达那里的过程。
答案 0 :(得分:3)
您正在线性地考虑这些步骤,而执行实际上是嵌套的(由缩进表示):
call p1a(3)
call p1a(2)
call p1a(1)
return 2
return pow(2, 2)
return pow(4, 2)
所以最后的return
返回值16。