当前位置: 首页 > news >正文

C++ 递归、搜索与回溯:三剑客

一、递归(Recursion)

1. 概念

函数自己调用自己,把大问题拆成更小的同类型问题。

2. 两个必备条件

  1. 递归出口(base case):不再递归,直接返回结果
  2. 递归式:把问题规模缩小

3. 经典示例:求阶乘

1

2

3

4

intfact(intn) {

if(n == 0)return1;// 出口

returnn * fact(n - 1);// 递归式

}

4. 本质

  • 系统使用保存每一层调用
  • 太深会栈溢出(stack overflow)

二、搜索(Search)

搜索就是在所有可能情况里找答案。常见两类:

  1. 深度优先搜索 DFS(一条路走到底)
  2. 广度优先搜索 BFS(一层层扩散)

递归最常配合DFS

三、回溯(Backtracking)

1. 概念

递归搜索 + 撤销选择= 回溯

  • 选一条路走
  • 走不通就回退一步
  • 尝试其他可能

典型场景:排列、组合、子集、N 皇后、数独

2. 回溯通用模板(必背)

1

2

3

4

5

6

7

8

9

10

11

voidbacktrack(路径, 选择列表) {

if(满足结束条件) {

记录答案;

return;

}

for(选择 : 选择列表) {

做选择;

backtrack(路径, 选择列表);

撤销选择;// 回溯核心

}

}

四、三个经典例子(一看就懂)

例 1:全排列(回溯经典)

[1,2,3]的所有排列

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

vector<vector<int>> res;

vector<int> path;

boolvis[10];

voiddfs(vector<int>& nums) {

if(path.size() == nums.size()) {

res.push_back(path);

return;

}

for(inti = 0; i < nums.size(); i++) {

if(vis[i])continue;

vis[i] = 1;

path.push_back(nums[i]);

dfs(nums);

path.pop_back();// 回溯

vis[i] = 0;

}

}

例 2:子集(搜索所有可能)

1

2

3

4

5

6

7

8

voiddfs(vector<int>& nums,intu) {

res.push_back(path);

for(inti = u; i < nums.size(); i++) {

path.push_back(nums[i]);

dfs(nums, i + 1);

path.pop_back();

}

}

例 3:斐波那契(纯递归)

1

2

3

4

intfib(intn) {

if(n <= 1)returnn;

returnfib(n-1) + fib(n-2);

}

五、三者关系(一句话总结)

  • 递归:函数自己调用自己,是实现方式
  • 搜索:遍历所有可能,是算法思想
  • 回溯:递归搜索 + 撤销选择,是搜索的一种通用写法

六、最常考题型

  • 全排列、组合、子集
  • N 皇后
  • 数独
  • 电话号码字母组合
  • 矩阵中的路径(单词搜索)
  • 分割回文串

到此这篇关于C++ 递归、搜索与回溯的文章就介绍到这了,

http://www.cnnetsun.cn/news/4149912.html

相关文章:

  • C++函数模板与普通函数:重载决议与性能优化指南
  • 智能车竞赛全栈技术指南:从零构建感知决策控制闭环系统
  • AI如何通过选择性遗忘提升泛化能力:正则化技术详解
  • 文本摘要技术面试要点与实战解析
  • Ubuntu系统libkmod报错解析与修复:内核模块配置问题排查指南
  • Python+Vue招聘信息分析系统开发实战
  • 多智能体强化学习策略组合:从后继特征迁移到协同安全实践
  • 从邮路规划到VRP:运筹学经典问题的建模与求解实战
  • 哈希表在算法面试与工程实践中的核心应用
  • 从OpenAI暂停RL训练看AI安全:开发者如何构建可控的AI应用
  • 降AI工具价格越低越好吗?把返修、复检和失败成本一起算!
  • C++模板本质:编译期类型工厂与零开销泛型编程
  • C++模板本质是编译期元编程引擎
  • 视觉盗梦攻击:多模态记忆投毒如何威胁AI智能体推荐系统安全
  • Java/Go/Python三语言技术栈面试全攻略
  • Java全栈工程师核心能力与面试系统化准备指南
  • 简历优化与面试技巧:提升求职成功率的关键策略
  • 从美赛E题看数学建模实战:光污染分析中的GWR模型与空间数据处理
  • 2026届毕业生必备AI写作助手评测与求职优化指南
  • async/await底层原理与7个高阶实战用法
  • DR-Venus:基于1万条数据的边缘AI智能体架构与轻量化实现
  • 双非生如何斩获大厂Java offer:技术准备与面试策略
  • 千牛店群自动化管理系统:多线程不抢焦,告别网页卡死报错
  • 从脑-手-数据体系到具身智能:基于ROS 2的机器人系统实战开发
  • C++可变参数模板:从语法基础到高级应用与性能优化
  • C++函数模板:从语法到实战,告别重复造轮子
  • GPU架构核心解析与面试实战指南
  • 图像算法工程师面试核心考察与实战解析
  • 拼多多2026届春招技术岗解析与面试指南
  • Spring Boot与Vue构建高并发招聘平台实战