递归跟踪

bub*_*ada 2 recursion

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

int Foo(int n)
{
   if (n <= 1)
      return 2;
   else
      return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

IVl*_*lad 6

Foo(3)电话Foo(2),Foo(1)Foo(0)

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

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

            Foo(3)
      /       |        \
   Foo(2)   Foo(1)   Foo(0)
Run Code Online (Sandbox Code Playgroud)

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

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