递归,迭代,动态规划,记忆化递归的理解

90 阅读2分钟
  1. 递归(Recursion): 递归是一种算法设计技术,通过将问题分解为更小的同类问题来解决复杂的问题。在递归中,函数会调用自身来解决问题,每次调用都会处理一个较小规模的子问题,直到达到基本情况,然后逐步返回结果。递归需要有明确的终止条件,否则可能会陷入无限递归。

  2. 迭代(Iteration): 迭代是通过重复执行某个过程来解决问题的方法。与递归不同,迭代不涉及函数调用自身,而是使用循环结构,从初始状态开始,逐步迭代,直到达到预期的结果。迭代在很多情况下比递归更高效,因为避免了函数调用的开销。

    • 比如DFS和BFS算法我们可以通过栈/队列的模式将递归的解法转为迭代的方法以优化算法复杂度。可以理解为递归是剥洋葱,迭代是从洋葱内层向外层突破。
  3. 动态规划(Dynamic Programming): 动态规划是一种通过将问题分解成重叠子问题,并将子问题的解存储起来以避免重复计算的技术。与递归不同,动态规划通常使用一种自底向上的方法来解决问题,从最小的子问题开始逐步构建出更大规模的问题的解。动态规划适用于具有重叠子问题和最优子结构特性的问题,其中最优解可以通过组合子问题的最优解得出。

    • 感觉和记忆递归类似,只是通过动态的存储需要使用的pre cur值,减少内存空间的开销
  4. 记忆化递归(Memoization Recursion): 新建空间从f(1) - f(n)每次保存当前f(x)的值,减少递归调用栈,避免重复计算。

  5. 贪心算法(Greedy Algorithm:) 它在每一步选择中都采取当前状态下最优的选择,以希望最终得到全局最优解。