数据结构与算法-递归Recursion

特点

    递归是一种应用非常广泛的算法

    递归代码表达力强、简洁、高效

    其他数据结构和算法都会用到递归来编码,例如: DFS深度优先搜索、前中后序二叉树遍历

使用前提条件

    1.一个问题的解可以分解为几个子问题(数据规模更小的问题)的解

    2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样

    3.存在递归终止条件

编写递归代码

    找到问题分解规律,基于此写出递推公式,再推敲终止条件,最后翻译成代码

注意事项

    警惕堆栈溢出

        函数调用会使用栈来保存临时变量。

        每调用一个函数,都会将临时变量封装为栈帧压入栈,等函数执行完成返回时才出栈。

        系统栈或虚拟机栈空间都有大小限制,

        如果递归求解的数据规模很大,调用层次很深,一直压入栈,就会有堆栈溢出的⻛险。

        通过在代码中限制递归调用的最大深度方式来解决这问题,因事先无法计算所不能完全解决。

    警惕重复计算

        可以采用一个数据结构(如散列表)来暂存公式计算中间结果,防止重复计算

    时间复杂度耗时多

        递归代码多了很多函数调用,当这些函数调用的数量较大时,就会积聚成一个可观的时间成本

    空间复杂度高

        递归调用一次就在栈中保存一次现场数据,分析空间复杂度时,需要额外考虑这部分的开销

你可能感兴趣的:(数据结构与算法-递归Recursion)