什么是递归?
在定义一个过程或函数时出现调用本过程或本函数的成分,称为递归。若调用自身,称为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称为间接递归。
尾递归:如果一个递归过程或递归函数中递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。
递归算法通常把一个大的复杂问题层层转化为一个或多个与原问题相似的规模较小的问题来求解,只需要少量的代码就可以描述出解题过程所需要的多次重复计算,大大减少了算法的代码量。
所有的递归函数都能找到对应的非递归定义
一般来说,能够用递归解决的问题应该满足一下三个条件:
- 需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量规模上会有所不同
- 递归调用的次数必须是有限的
- 必须有结束递归的条件来终止递归
递归算法求解过程是:先将整个问题划分为若干个子问题,通过分别求解子问题,最后获得整个问题的解。这种自上而下将问题分解、求解,再自下而上引用,合并,求出最后解答的过程成为递归求解过程。这是一种分而治之的算法设计方法。递归调用是函数嵌套调用的一种特殊情况,即它是调用自身代码。
1、每递归调用一次,就需要进栈一次,进栈次数成为递归深度,当n越大,递归深度越深,开辟