让我们假设我有一个循环Foo。递归追踪
int Foo(int n)
{
if (n <= 1)
return 2;
else
return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
多少通话将发生如果我叫美孚(3),并会产生什么结果......
感谢
让我们假设我有一个循环Foo。递归追踪
int Foo(int n)
{
if (n <= 1)
return 2;
else
return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
多少通话将发生如果我叫美孚(3),并会产生什么结果......
感谢
Foo(3)
电话Foo(2)
,Foo(1)
和Foo(0)
Foo(1)
和Foo(0)
立即返回。现在应用相同的逻辑Foo(2)
,它不会立即返回。
要得到的结果,得出这样的树:
Foo(3)
/ | \
Foo(2) Foo(1) Foo(0)
继续绘制树,直到你有立即返回(为其第一if
返回true),然后使用这些结果来计算递归调用树中较高的值。
您可以使用该树来确定进行了多少次递归调用。
@bubdada:然后,为了确保你明白,试用Foo(5)。记下你最终为任何给定的输入值调用函数的次数(即你最终调用Foo(0),Foo(1),Foo(2),Foo(3),Foo( 4)和Foo(5)?)。为了获得额外的信用,找出一种减少重复的方法,因为在给定相同输入的情况下,Foo应该返回相同的值。 – 2010-07-20 23:21:11
通行证1:美孚(3)
通行证2:美孚(2)*美孚(1)*美孚(0)
通行证3:美孚(1)*美孚(0)*美孚(-1)* 2 * 2
结果:2 * 2 * 2 * 2 * 2 = 32
美孚(3)将被调用的7倍。
你为什么不运行它,并找出? – 2010-07-20 23:14:59
我需要能够手工交易,我期待在考试中看到类似的内容:D – bubdada 2010-07-20 23:18:32
7个电话:http://ideone.com/0LU9T – zengr 2010-07-20 23:30:36