【左程云算法全讲13】暴力递归

系列综述:
💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!
🌈【C++】秋招&实习面经汇总篇


文章目录

    • 一、基础
      • 概述
    • 参考博客


😊点此到文末惊喜↩︎


一、基础

概述

  1. 暴力递归

    • 本质
      • 遍历尝试形成一颗遍历树,并可对该树模型进行剪枝优化
      • 遍历树中递归函数执行的次数,就是树的分叉数量
      • 将一个大问题如何拆解成同样含义,并且数据量变小的子问题
    • 递归结束条件就是叶子结点的符合条件,或者剪枝条件
      在这里插入图片描述
    • 优化方法
      • 分支限界:暴力递归的过程中进行过滤
  2. 例题:汉诺塔

    • 题目
      • ​ 给定三根柱子,记为A,B,C,其中 柱子上有N个盘子,从下到上编号为0 ~ N-1,且上面的盘子一定比下面的盘子小。问:将A柱上的盘子经由B柱移动到C最少需要多少次?其中
      • ① 一次只能移动一个盘子
      • ​② 大的盘子不能压在小盘子上
        在这里插入图片描述
        在这里插入图片描述
// 将盘堆看做0号盘子和1~N-1号盘子,然后进行移动
void func(int N, string from, string to, string orher) {if (N == 1) {cout << "Move 1 from" + from + "to" + to;} else {// 函数调用注意形参的位置和含义func(N-1, from, other, to);	// N-1个圆盘到other上cout << "Move" + N + " from " + from + " to " + to;	// 将第N个圆盘挪到to上func(N-1, other, to, from);	// 将剩下N-1个圆盘从other挪到to上}
}
// 主调函数
void hanoi(int n) {if (n > 0) func(n, "left", "right", "mid");
}
  1. 例题:将栈内元素逆序
    • 题目
      • ​ 将栈中的元素进行逆序

// 取出栈中的最后一个元素并返回
int func(stack<int> st) {int result = stack.pop();	// 获取栈顶元素并弹出if (stack.empty()) {return result;} else {int bottom = func(st);	// 获取最底部的元素st.push(result);		// 压入元素return bottom;			// 递归传递最低元素}
}void reverse(stack<int> st) {int result = st.pop();if (st.empty()) return ;int i = f(st);	// 取出栈中最低的元素reverse(st);	// 一直取到栈中没有元素了st.push(i);		// 再将元素压入栈
}
  1. 例题:生成字符串的所有无重复子序列(有序,但可以不相邻)
    在这里插入图片描述
// 参数中带&等价于全局变量
void Process(const string &str, int index, unordered_set<string> &res, string &path) {if (index == str.size()){res.emplace(path);return ;} // 不选择当前index字符string no = path;Process(str, index+1, res, no);// 选择当前index字符string yes = path + str[index];Process(str, index+1, res, yes);
}
  1. 全排列
    • 输出一个数组的全排列
      在这里插入图片描述
void process(string str, int i, vector<string> &res) {if (i == str.size()) {res.push_back(str);}// 如果i没有终止,i...都可以来到i位置for (int j = i; j < str.size(); ++j) {swap(str[i], str[j]);		// 交换process(str, i+1, res);	// 递归swap(str[i], str[j]);		// 还原}
}


少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
不如点赞·收藏·关注一波

🚩点此跳转到首行↩︎

参考博客

  1. csdn图相关算法
  2. 汉诺塔(图文结合),超好理解
  3. 待定引用
  4. 待定引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/192445.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

csapp attack lab phase4

csapp attack lab phase4 每个gadget由一系列指令字节组成&#xff0c;最后一个字节为0xc3&#xff0c;编码为ret指令。 举个例子: 48 89 c7 是指令 movq %rax, %rdi&#xff0c; 对应的地址是0x400f15 0x3 也就是0x400f18, 是开始的指令位置。 例如&#xff1a; ret编码为0…

YOLO目标检测——无人机检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;无人机识别数据集说明&#xff1a;无人机检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo(txt)三种格式标签…

MySQL数据库下载及安装教程(最最新版)

MySQL数据库下载及安装教程&#xff08;最最新版&#xff09; 一、下载mysql数据库二、安装Mysql三、验证是否安装成功&#xff08;一&#xff09;、命令提示符cmd窗口验证&#xff08;二&#xff09;、MySQL控制台验证 一、下载mysql数据库 进入MySQL官方网站&#xff08;htt…

CCF CSP认证 历年题目自练Day47

题目 试题编号&#xff1a; 201712-3 试题名称&#xff1a; Crontab 时间限制&#xff1a; 10.0s 内存限制&#xff1a; 256.0MB 样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * have_dinner 样例输出 201711170…

杭州信息安全

更轻量级的用户开销 (Lower online burden) 更灵活的通信模型 (Flexible metadata-private messaging) 一对一通信 >多对一、一对多通信 Group messaging Broadcast / anycast 元数据隐私保护技术在其他系统的推广

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之进程管理2》(4)

《Linux操作系统原理分析之进程管理2》》&#xff08;4&#xff09; 3 进程管理3.5 P、V操作3.5.1 信号量3.5.2 信号量的应用3.5.3 进程同步机制 3.6 进程通信3.6.1 消息通信3.6.2 信箱通信 3.7 死锁3.7.1 死锁的定义3.7.2 死锁产生的必要条件3.7.3 死锁的预防3.7.4 死锁的避免…

flink入门

1.安装flink&#xff0c;启动flink 文档地址&#xff1a;Apache Flink 1.3-SNAPSHOT 中文文档: Apache Flink 中文文档 代码&#xff1a;GitHub - apache/flink: Apache Flink 2. 打开端口 端口号&#xff0c; 启动jar ### 切换到flink 目录bin下 [rootlocalhost ~]# cd /…

Vue3 toRef函数和toRefs函数

当我们在setup 中的以读取对象属性单独交出去时&#xff0c;我们会发现这样会丢失响应式&#xff1a; setup() {let person reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})return {name: person.name,age: person.age,type: person.jo…

2023最新最全【CUDA Toolkit 12.3】下载安装零基础教程【附安装包】

官网地址&#xff1a;这里 CUDA是英伟达公司开发的一种并行计算平台和编程模型。它利用GPU的强大计算能力&#xff0c;加速各种数学和科学计算、数据分析、机器学习、计算机视觉等任务。CUDA包括CUDA编程语言、CUDA运行时库、NVIDIA显卡等组件。 CUDA的编写方式分为两种&…

Python aiohttp 完全指南:快速入门

aiohttp 就是 Python 中一款优秀的异步 Web 框架&#xff0c;它能够帮助我们构建高效的异步 Web 应用和异步 HTTP 客户端。在本文中&#xff0c;我们将深入探讨 aiohttp 是什么以及如何使用它&#xff0c;通过简单易懂的案例带领你理解异步编程&#xff0c;以及如何处理异步请求…

OpenGL 的学习之路-4(变换)

三大变换&#xff1a;平移、缩放、旋转&#xff08;通过这三种变换&#xff0c;可以将图像移动到任意位置&#xff09; 其实&#xff0c;这背后对应的数学在 闫令琪 图形学课程 中有过一些了解&#xff0c;所以&#xff0c;理解起来也不觉得很困难。看程序吧。 1.画三角形&am…

FISCO BCOS 3.0【02】配置和使用系统自带的控制台

官方技术文档&#xff1a;https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/index.html 我们在官方技术文档的基础上&#xff0c;进行&#xff0c;对文档中一些不清楚的地方进行修正 控制台提供了向FISCO BCOS节点部署合约、发起合约调用、查询链状态等功能。 第一步. 安…