什么是递归
递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。
递归思想
递归它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
使用递归的重点
递归的过程,最重要的就是查看能不能将原本的问题分解为更小的子问题,这是使用递归的关键。
递归的形式
关于递归算法的话,我们每次可以先解决一个问题,然后接下来的问题交给下一步解决,这就是所谓的划一刀。
第一种形式:切蛋糕思想
我们如果是要求和或者是求一个数的阶层或者是翻转字符串,我们可以使用递归的第一种方式来完成
第一种方式:f(N)=x+f(小规模) 直接量+小规模子问题的形式,这种叫做切蛋糕思想
而像我们的斐波那契数列那样的,从第三个开始,任意两个数等于前两个数的和,这个我们就要使用我们递归的第二种形式来解决
第二种形式:递归树思想
第二种方式:f(N)=f(小规模)+f(小规模) 多个子规模的形式来解决
这种多个子规模的方式,我们可以吧他们叫成递归树,递归树的步骤是 先纵后横
递归中非常经典的问题:斐波那契数列、汉诺塔问题
汉诺塔问题:有ABC三处,将所有的盘子从A处移动到B处,并在任何时候,都是小盘子在大盘子的上面
常用递归的列举和分析
- 二叉树的递归
二叉树的递归,则是将某个节点的左子树、右子树看成一颗完整的树,那么对于子树的访问或者操作就是对于原树的访问或者操作的子问题,因此可以自我调用函数不断进入子树。所以我们在使用二叉树来解决问题的时候通常都可以使用递归来解决。
- 动态规划
基本上能用动态规划的算法题目,我们都可以使用递归来解决