递归跟踪

时间:2010-07-20 23:11:03

标签: recursion

让我们假设我有一个Foo循环。

int Foo(int n)
{
   if (n <= 1)
      return 2;
   else
      return Foo(n-1) * Foo(n-2) * Foo (n-3);
}

如果我打电话给Foo(3)会发生多少次通话......

由于

4 个答案:

答案 0 :(得分:6)

Foo(3)来电Foo(2)Foo(1)Foo(0)

Foo(1)Foo(0)立即返回。现在为Foo(2)应用相同的逻辑,它不会立即返回。

要获得结果,请绘制如下树:

            Foo(3)
      /       |        \
   Foo(2)   Foo(1)   Foo(0)

继续绘制树,直到您有立即返回的递归调用(第一个if返回true),然后使用这些结果计算树中较高的值。

您可以使用树来确定也会进行多少次递归调用。

答案 1 :(得分:2)

通过1:Foo(3)

传球2:Foo(2)* Foo(1)* Foo(0)

传球3:Foo(1)* Foo(0)* Foo(-1)* 2 * 2

结果:2 * 2 * 2 * 2 * 2 = 32

答案 2 :(得分:0)

Foo(3)将被调用7次。

答案 3 :(得分:0)

怎么样:

int Foo(int n)
{
   cout << "Foo(" << n << ")" << endl;
   if (n <= 1)
      return 2;
   else
      return Foo(n-1) * Foo(n-2) * Foo (n-3);
}