【发布时间】:2018-11-07 09:00:00
【问题描述】:
我最近开始研究算法和数据结构。我遇到了斐波那契问题及其使用递归的解决方案。但就是这样。我理解当只有一个时递归调用是如何工作的(比如在一个数字的阶乘中)。函数调用会不断堆积,直到它们达到基本情况,然后它们开始以一为单位解开到所需的答案。
但是我不明白的是,当 f(n)+f(n/2) 这样的表达式中有两个递归调用时,递归是如何工作的。我的意思是首先解决哪个呼叫,以及何时解决第二个呼叫。如果将此表达式分配给语句,如何计算总和? 我自己写了一个小代码来破译这个。
#include <iostream>
#include <string>
int main()
{
int recursionTest(int n, char c);
int x;
std::cin>>x;
std::cout<<"Ans:"<<recursionTest(x,'c');
}
int recursionTest(int n,char c)
{
int result=0;
if(n==0)
return 1;
std::cout<<n<<":"<<c<<std::endl;
result=recursionTest(n/2,'L')+recursionTest(n/3,'R');////I cant figure
out the flow of
control here!!!
return result;
}
我得到了以下输出。
24
24:c
12:L
6:L
3:L
1:L
1:R
2:R
1:L
4:R
2:L
1:L
1:R
8:R
4:L
2:L
1:L
1:R
2:R
1:L
Ans:20
所以我明白了,它是一个树形结构。但我仍然不知道我们如何得到 20 作为答案(输入 = 24)。 sum 表达式是如何工作的,它是什么,我如何查看树结构并生成相同的输出?
【问题讨论】:
-
我一定会查看链接。但从我所读到的,这不是我的困惑。我想知道左表达式在达到基本情况后是否继续解开,在那段时间右表达式的状态是这样的?如果是这样,那么正确的部分何时开始解开其堆叠的函数调用?