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


    递归

    是什么
    • 搞懂递归非常重要:递归应用非常广泛,很多数据结构和算法的编码实现都要用到递归,比如 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.结合条件断点进行调试。
  • 相关阅读:
    微信企业号开发:UserAgent
    用sinopia搭建内部npm服务
    python format用法详解
    python正则表达式re之compile函数解析
    Socket通信原理
    TCP半开连接与半闭连接
    使用npm安装一些包失败了的看过来(npm国内镜像介绍)
    UI优秀框架(库)
    关于 WebView 知识点的详解
    CommonJS规范
  • 原文地址:https://www.cnblogs.com/wod-Y/p/11950445.html
Copyright © 2020-2023  润新知