我想我正在理解递归的原理,例如类似行为的堆栈以及程序通过函数调用返回“yo-yo”的方式,我似乎很难弄清楚为什么某些函数返回它们所执行的值虽然,下面的代码返回160,这是由于返回5起作用了,我想我说对了,它将变为4 * 2 + 8 * 2 + 12 * 2等。我真的很怀疑当改变我的值(value)观时。

有人能简要说明哪些值被相乘吗?

cout << mysteryFunction(20);

int mysteryFunction (int n)
{
 if(n > 2)
  {
   return mysteryFunction(n - 4)*2;
  }

   else return 5;
}

最佳答案

如果您对实际的调用堆栈感兴趣:

mysteryFunction(20):
[n > 2] -> mysteryFunction(16) * 2
           [n > 2] -> mysteryFunction(12) * 2
                      [n > 2] -> mysteryFunction(8) * 2
                                 [n > 2] -> mysteryFunction(4) * 2
                                            [n > 2] -> mysteryFunction(0) * 2
                                                       [n <= 2] -> 5
                                            5 * 2 = 10
                                 10 * 2 = 20
                      20 * 2 = 40
           40 * 2 = 80
80 * 2 = 160

更一般地:20 = 4*5,所以5 * 2^5 = 5 * 32 = 160

09-11 17:20