文章目录
概念
官方解释:一种通过重复将问题分解为同类的子问题而解决问题的方法。
我的理解:一种把大问题拆分成若干个算法逻辑相同的子问题,只有数据的大小发生改变。简单来说就是:“不停直接或间接调用自身函数,每次调用会改变一个或者多个变量,直到变量到达边界,结束调用。”
使用场景:
1.个大问题可以拆分为多个子问题的解。
2.拆分后的子问题和原问题除了数据大小不一样,解决思路完全相同。
3.存在递归的终止条件
注意:写递归代码一定要注意方法的语义(方法的功能),不能陷入递归内部。当做调用别人写好的代码。
递归算法的优缺点
优点:只需要几条代码就可以解决问题,特别适合以下三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
缺点:(1)有时因为太过简洁而难理解过程。
(2)递归会保存大量临时数据和重复的数据,太多的话,会造成栈溢出