0

我越来越接近揭穿这个递归之谜了,在这行代码中只有一件事我无法追踪,那就是最终的返回值,243如果我调用rec()它传递值 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);
}
4

3 回答 3

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

于 2012-12-04T11:56:49.903 回答
2

该函数计算

3^n where n >= 0

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

于 2012-12-04T11:59:39.150 回答
-1

它只会乘以 3、4 倍:

return 3 * rec(n-1);

我想你想要这样的东西:

return n * rec(n-1);
于 2012-12-04T11:56:42.987 回答