让我们假设我有一个Foo循环。
int Foo(int n)
{
if (n <= 1)
return 2;
else
return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
如果我打电话给Foo(3)会发生多少次通话......
由于
答案 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);
}