递归的理解(二叉树的先序遍历)

理解递归首先要明白递归是用栈来实现的,而栈的特点就是先进后出。

eg1:

279759ee3d6d55fbdc9d86096f224f4a20a4dd42.jpg

解析:递归是利用栈来实现的。被调函数地址首先存入栈,存在栈底部红色部分,然后f(5)入栈,f(4)、f(3)、f(2)、f(1)依次入栈,由于当n=1时候,f(1)可以被求解,f(1)出栈,栈顶指针top--,依次解析f(2)、f(3)、f(4)、f(5),最后返回被调函数地址。

一般情况递归不断越调越小,直到最后一个调用(一般就是最小的f(1))结束后(也就是有确切的结果了),就会返回上一级的函数调用,最终返回大第一次的递归调用(逐级返回)

eg2:

b9570f3d2e19934aaae850cc9d949217e04.jpg

先序遍历算法如上

70782def124feae9b4741acd9bf3db3c154.jpg

解析:先序代码里有两个递归调用,执行的顺序就如我上图那样,先一个一个的来。先调用第一个递归,然后第一个递归调用的过程中又会继续调用递归,层层往下,知道最后一个为null的时候才返回上一级。上一级的第一个递归后面还有一个递归,所以继续去执行上一级的后一个递归。直到上一级的两个递归都执行完毕就继续返回更上一级,然后就这样依次的返回。直到最后返回到最初一级,这时候第一级的第一个调用才执行完毕,然后才执行第一级的第二个递归。这第二个递归执行的过程也是跟上面的一样的。

 

 

 

转载于:https://my.oschina.net/u/4120977/blog/3098137

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值