递归算法计算机运行解析
以单递归及嵌套递归两个例子,说明递归在计算机中的运行:
说明:方法调用时,都是先调用完一个方法后再调用另一个方法,并不是同时调用多个方法的。
第一个例子:
void TestRecursive(int itest)
{
cout << "1:" << itest << endl;
if (itest<1)
{
return;
}
TestRecursive(itest - 1);
cout << "2:" << itest << endl;
return;
}
int main()
{
TestRecursive(3);
}
执行结果如下:
分析图如下:
说明:红色标号为执行顺序。
参考文档:
https://www.bilibili.com/video/av78812515/
第二个例子,嵌套调用:
int gint = 0;//global用于计数,查看递归函数调用的次数
int fib(int n)
{
cout <<"gint:"<<gint++<<" n:"<< n << endl;
if (n == 1 || n == 2)
{
cout << "return 1--------------------" << endl << endl;;
return 1;
}
int breturn = fib(n - 1) + fib(n - 2);
cout << "fib return:" << breturn << endl;
return breturn;
}
int main()
{
cout << "begin:" << gint++ << endl;
fib(6);
}
运行结果如下图:
分析结果,如下图:
具体执行分析如下:
输出结果:
Main 函数中:begin:0
0:gint:1 n:6
1:gint:2 n:5
2:gint:3 n:4
3:gint:4 n:3
4:gint:5 n:2
//F2满足return条件,返回
Return 1----------
//现在需要计算1+F1(5),F1调用递归并直接返回
Giant 6 n:1
Return 1----------
//红色6计算1+1=2,完成之后,调用递归并返回2
Fib return 2//自此,到达F3=3,需要计算2+F2
Giant 7 n:2
Return 1------
//红色8计算F4并返回
Fib return 3
//下面需要计算3+F3(第9步)
Gint 8:n:3
Gian 9 n:2
Return 1----------------
------------------------------
PS:
太长了,没写完。。。有空再补充吧。