Recursion 递归跟踪

Recursion 递归跟踪,recursion,Recursion,假设我有一个Foo循环 int Foo(int n) { if (n <= 1) return 2; else return Foo(n-1) * Foo(n-2) * Foo (n-3); } intfoo(intn) { 如果(nFoo(3)调用Foo(2),Foo(1)和Foo(0) Foo(1)和Foo(0)立即返回。现在对Foo(2)应用相同的逻辑,它不会立即返回 要获得结果,请绘制如下树: Foo(3)

假设我有一个Foo循环

int Foo(int n)
{
   if (n <= 1)
      return 2;
   else
      return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
intfoo(intn)
{
如果(n
Foo(3)
调用
Foo(2)
Foo(1)
Foo(0)

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

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

            Foo(3)
      /       |        \
   Foo(2)   Foo(1)   Foo(0)
继续绘制树,直到有立即返回的递归调用(第一个
if
返回true),然后使用这些结果计算树中较高的值

您可以使用树计算出进行了多少递归调用。

pass1:Foo(3)

通过2:Foo(2)*Foo(1)*Foo(0)

通过3:Foo(1)*Foo(0)*Foo(-1)*2*2

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

Foo(3)将被呼叫7次。

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

你为什么不运行它并找出答案呢?我需要能够手工交易这个,我在考试中期待类似的东西:D7调用:发生了多少调用?我有点困惑…@bubdada:那么,为了确保你理解,用Foo(5)试试。记下你为任何给定的输入值调用函数的次数(也就是说,你最后打了多少次电话给Foo(0)、Foo(1)、Foo(2)、Foo(3)、Foo(4)和Foo(5)?)为了获得额外的信用,找出一种减少重复的方法,因为Foo应该返回相同的值,因为输入相同的输入。我需要写更多的代码行,然后20行代码才能运行在我的系统上。因为我们使用的是一个蹩脚的C++版本,但是谢谢你……BudDaDa:你甚至不能使用<代码> Prtff<代码>?