zoukankan      html  css  js  c++  java
  • 05:递归

    1、递归==》DFS深度优先搜索、前中后序二叉树遍历

    递归求解问题的分解过程==》去的过程叫“递”,回来的过程叫“归”,基本上,所有的递归问题都可以用递推公式来表示

    2、递归需要满足的三个条件==》

    一个问题的解可以分解为几个子问题的解

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

    存在递归终止条件

    3、递归代码==》递推公式,终止条件  找到将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最终将递推公式和终止条件翻译成代码

    台阶问题==》f(n) = f(n-1) + f(n-2)  f(1) = 1 f(2) = 2

    4、递归问题==》如果一个问题A可以分解为若干子问题B、C、D,可以假设子问题B、C、D已经解决,在此基础上思考如何解决问题A。而且,只需要思考问题A与子问题B、C、D两层之间的关系即可,不需要一层一层往下思考子问题与子子问题,子子问题与子子子问题之间的关系

    5、递归代码要警惕堆栈溢出

    6、递归代码要警惕重复计算==》为了避免重复计算,可以通过一个数据结构(比如散列表)来保存已经求解过的f(k)。当递归调用到f(k)时,先看下是否已经求解过了。如果是,则直接从散列表中取值返回,不需要重复计算

    7、递归代码改为非递归代码==》迭代循环

  • 相关阅读:
    普通类型(Trivial Type)和标准布局类型(Standard-layout Type)以及POD类型
    设计模式
    网络相关的学习和命令总结
    sheel命令学习和工作总结。
    Makefile的学习
    [UI基础][实现]九宫格之应用程序管理
    [嵌入式][分享][交流]发布一个消息地图的模块
    [UI基础][不会说话的汤姆猫]
    [UI基础][QQ登陆界面]
    volatile的陷阱
  • 原文地址:https://www.cnblogs.com/liushoudong/p/13508242.html
Copyright © 2011-2022 走看看