数据结构与算法简记--递归

递归

是什么
  • 搞懂递归非常重要:递归应用非常广泛,很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等等。
  • 简单讲就是自己调自己
  • 两个步骤:递--层层调用的过程;归--层层返回的过程
  • 可以写出递推公式,如:
f(n) = f(n-1) + 1; 
f(n) = f(n-1) + f(n-2);
f(n)=n*f(n-1);
为什么
  • 优点:代码的表达力很强,写起来简洁。
  • 缺点:空间复杂度高、有堆栈溢出风险、存在重复计算、过多的函数调用会耗时较多等问题。
怎么做
  • 成立需三个条件:
  1. 一个问题的解可以分解为几个子问题的解
  2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
  3. 存在递归终止条件
  • 如何编写递归代码?

写出递推公式,找到终止条件

编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。

f(n)=f(n-1)+1 其中,f(1)=1
  • 防止堆栈溢出:限制递归次数,超过次数报错退出
  • 防止重复计算:利用缓存数据结构(如散列表)缓存计算过的项
  • 调试递归:
    1.打印日志发现,递归值。
    2.结合条件断点进行调试。
posted @ 2019-11-28 15:41  杨海星  阅读(133)  评论(0编辑  收藏  举报