递归算法计算机运行解析

递归算法计算机运行解析

 

以单递归及嵌套递归两个例子,说明递归在计算机中的运行:

说明:方法调用时,都是先调用完一个方法后再调用另一个方法,并不是同时调用多个方法的。

第一个例子:

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:

太长了,没写完。。。有空再补充吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值