跟踪简单的递归函数

时间:2012-12-04 11:53:44

标签: c++ recursion

我越来越接近揭穿这个递归的谜团,只剩下一件我无法在这行代码中追踪的东西,如果我调用{{243,那就是最后的返回值rec() 1}}传递值5.这应该是跟踪:

n: 4 *3: 12
n: 3 *3: 9
n: 2 *3: 6
n: 1 *3: 3
n: 0 *3: 0
n: 1 *3: 3

result: 243

正确?它如何得到243的结果?

int rec(int n)
{
if (n == 0)
    return 1;


return 3 * rec(n-1);
}

3 个答案:

答案 0 :(得分:8)

您的函数计算: 3 ^ n

数字3乘以n-1个呼叫的结果。

f(n) = 3 * f(n-1);

f(0) = 1;

f(1) = 3 * f(0) = 3 * 1 = 3;

f(2) = 3 * f(1) = 3 * 3 = 9;

f(3) = 3 * f(2) = 3 * 3 * f(1) = 3 * 3 * 3 = 27

。 。

f(5) = 3 * 3 * 3 * 3 * 3 = 243

答案 1 :(得分:2)

此功能计算

3^n where n >= 0

如果你通过5则计算3 * 3 * 3 * 3 * 3 *(1)= 243

答案 2 :(得分:-1)

它只在3倍,4倍倍增:

return 3 * rec(n-1);

我想你想要这样的东西:

return n * rec(n-1);