cen's blog cen's blog
首页
  • 编程文章

    • Markdown使用
    • C语言程序的运行
  • 学习笔记

    • C++学习
    • C++数据结构
    • MySQL
    • Linux
    • 网络编程
算法
  • Git
  • ProtoBuf
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

cen

十年饮冰,难凉热血
首页
  • 编程文章

    • Markdown使用
    • C语言程序的运行
  • 学习笔记

    • C++学习
    • C++数据结构
    • MySQL
    • Linux
    • 网络编程
算法
  • Git
  • ProtoBuf
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • 双指针算法
  • 二分算法
  • 常用数据结构
  • 动态规划
  • 递归、搜索和回溯
    • 递归
      • 什么是递归
      • 为什么用递归
      • 怎么写递归
    • 搜索
    • 回溯与剪枝
    • 循环 vs 递归
  • 算法
cen
2026-04-08
目录

递归、搜索和回溯

# 递归

# 什么是递归

自己调用自己:

例 1:二叉树的后序遍历 例 2:快排 例 3:归并

# 为什么用递归

本质:解决一个主问题时出现了一个相同的子问题,如此循环就可以使用递归,知道出现了无法分解的最小问题

# 怎么写递归

如何宏观看代递归过程:

  1. 不要在意递归的细节展开图

  2. 将递归函数当成一个黑盒

  3. 足够相信这个黑盒一定可以完成任务

  4. 先找到相同的子问题 --》函数头的设计

  5. 关心某一个子问题如何解决 --》函数体的设计

  6. 注意递归函数的结束

# 搜索

搜索分为两种:

  1. 深度优先搜索/深度优先遍历/dfs(递归、栈)
  2. 宽度优先搜索/宽度优先遍历/bfs(队列)

# 回溯与剪枝

回溯本质就是深搜 剪枝就是发现某种情况一定不行,直接除去情况

# 循环 vs 递归

循环和递归都是在处理重复的问题,二者可以相互转换,但是为什么有时候互相转换十分复杂?

什么时候用循环? 什么时候用递归?

一颗树进行深度搜索的话,复杂用递归;只有一个分支用循环简单

动态规划

← 动态规划

最近更新
01
事务特性
04-10
02
C语言程序的运行
04-07
03
Cmake
11-29
更多文章>
Theme by Vdoing | Copyright © 2024-2026 京ICP备2020044002号-3 京公网安备11010502056119号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式