我想我正在理解递归的原理,例如类似行为的堆栈以及程序通过函数调用返回“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
。