数据结构与算法(一):图解递归

图解递归

通俗地讲,递归即调用函数自身,很容易让人想到套娃玩具。但代码写出来又很让人不解,一个函数调用另一个函数很好理解,但调用自身什么鬼?因为这不是人类能轻易想象的结构。

递归是用栈来实现的,画出函数的进栈出栈图可以清楚看出其执行过程。
这里我们不使用栈,而从程序运行流程中理解。

我们从以下两点分析递归:
1、退出条件:必定有一个条件能结束递归,否则会死循环。函数的每次迭代都要使得向结束条件靠拢。
2、函数功能:函数每次迭代都会完成某一特定功能,而这才是递归的目的。

考虑如下两个递归函数:
在这里插入图片描述这是两个简单的递归函数,以 func4为例,它的退出条件是x>0,func4(x-1)是对自身的调用,而函数实现的功能则是print(x).

func4 单次执行流程如下:
在这里插入图片描述


调用第二次时:
在这里插入图片描述

多次递归调用的情况就是:
在这里插入图片描述
最内层调用,x=1时不满足条件时会跳出递归,但程序是自上而下执行的,于是有输出1,2,3,4:
在这里插入图片描述

同样的思路我们可画出func3程序执行流程图:
在这里插入图片描述
x=1时退出递归,结果会一层层向外返回,但程序总是自上而下执行,所以输出结果就是4,3,2,1.


小结

这篇文章从程序流程角度给出递归的工作方式,希望大家对递归有更直观地感受,并没有讲解什么深刻内容。有n多文章从理论角度解读递归,很优秀,也很深刻。我不再举例了,有兴趣同学可以自行百度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值