文章目录

  • 递归
    • 什么是递归
    • 为什么会用到递归
    • 如何理解递归
    • 如何写好一个递归
  • 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度(广度)优先遍历 vs 宽度(广度)优先搜索 vs 暴搜
    • 深度优先遍历 vs 深度优先搜索(dfs)
    • 宽度(广度)优先遍历 vs 宽度(广度)优先搜索(bfs)
    • 关系图
    • 拓展搜索问题
  • 回溯和剪枝

递归

什么是递归

通俗来讲,也就是函数自己调用自己的情况。像二叉树的遍历、快排算法、归并算法等。

为什么会用到递归

本质:解决主问题的时候会衍生出相同的子问题,解决子问题的时候又衍生出相同的子问题。

主问题 -> 相同的子问题
子问题 -> 相同的子问题

一直往复…

如何理解递归

第一层次去理解:画递归展开的细节图
第二层次去理解:编写和理解二叉树中的题目
第三层次去理解:宏观的看待递归的过程

我们要在第三层去理解:

  1. 不要在意递归的细节展开图
  2. 把递归的函数当成一个黑盒(过程是怎么样的不用管,看不到内部过程)
  3. 相信这个黑盒一定能够完成这个任务

如何写好一个递归

  1. 先找到相同的子问题!!!!!-> 决定了函数头的设计
  2. 只关心某一个子问题是如何解决的 -> 函数体的书写
  3. 注意一下递归函数的出口即可

把数据结构中二叉树的题目,试着用第三层的方式去理解一下。

搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度(广度)优先遍历 vs 宽度(广度)优先搜索 vs 暴搜

搜索其实就是把整个解空间遍历一遍,本质就是暴力枚举一遍所有的情况。也就是暴搜。

深度优先遍历 vs 深度优先搜索(dfs)

通俗理解:一条道走到黑,走到不能再走时返回,遇到分支,和前面一样的操作。

遍历是形式,搜索是目的。所以他们两可以理解为一个东西。

宽度(广度)优先遍历 vs 宽度(广度)优先搜索(bfs)

通俗理解:一层一层剥开,也就是一层一层的去遍历。

遍历是形式,搜索是目的。所以他们两可以理解为一个东西。

关系图

在这里插入图片描述

拓展搜索问题

全排列问题:就是高中数学学的排列组合的问题,比如1,2,3,有哪几种排列方式。如果数少还能列的出来,但是数一多就很容易一漏掉一些情况。

树状图 (决策树)
在这里插入图片描述

注意:不要局限于认为只有二叉树和图这些问题才能使用dfs和bfs,只要整个问题能用决策树的方式画出来的话,就能使用。

回溯和剪枝

回溯其实就是深搜里的一个小分支。
在这里插入图片描述

简单理解一下回溯,就是尝试某种情况的时候,发现走不通,返回到上一级的这个操作。也就是图中红色按1走的然后返回到红点的过程。
再简单理解一下剪枝,就是按1返回到红点后再走到按2走,发现行不通再返回到红点,此时往上往下都有路线,但是往上走已经尝试过了,不用再走了。其实就是在分叉路口有两种选择的时候,但是我们已经明确知道了其中一个选择不是我们最终想要的结果的时候,我们就把这个结果给略过。

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

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

相关文章

借助Aspose.HTML控件,在 Python 中将 SVG 转换为 PDF

您可能会发现许多解决方案都提供以编程方式将SVG转换为PDF 的功能。但这篇博文将介绍一个功能强大的 SDK,供 Python 开发人员自动化文件转换和操作。本指南将重点介绍通过 .NET 实现 Python 的 Aspose.HTML。此外,我们将逐步讲解相关步骤和代码片段&…

高级06-Java网络编程:从Socket到HTTP

引言:Java 网络编程的重要性 随着互联网技术的飞速发展,网络编程已成为现代软件开发中不可或缺的一部分。Java 作为一种广泛应用于企业级开发和分布式系统的编程语言,提供了强大的网络通信支持。从底层的 Socket 编程到高层的 HTTP 协议处理&…

STM32的蓝牙通讯(HAL库)

蓝牙基础知识(了解即可):1.是一种利用低功率无线电,支持设备短距离通信的无线电技术,能在包括移动电话、PDAQ、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换,蓝牙工作在全球通用的2.4 GH…

方案B,version1

我们重新设计起步阶段的步骤,目标是:通过运行PowerShell脚本和配置GitHub Actions工作流(deploy.yml)来实现自动化部署。 要求: 用私有仓库(my-website-source-SSH)存储源码。 通过GitHub Actions自动构建(这里只是简单的Hello World,所以构建步骤可以简化为复制文件…

Linux --- 进程

一、进程概念 在 Linux 系统中,​​进程(Process)​​ 是程序执行的动态实例,是操作系统进行资源分配和调度的基本单位。 ​​1. 程序 vs 进程​​ ​​程序(Program)​​:是静态的代码集合&…

Cgroup 控制组学习(三)在容器中使用 CGroups

一、CGroups 关于mememory的限制操作 cgroup关于cpu操作 关于memeory cgroup的几个要点 ① memeory限额类 1、memory.limit_bytes:硬限制--> 限制最大内存使用量,单位有k、m、g三种,填-1则代表无限制,默认是字节2、memory.soft_limi…

SpringBoot面试基础知识

SpringBoot 是面试中后端开发岗位的高频考点,以下是核心考点整理:1. SpringBoot 基础概念- 定义:SpringBoot 是 Spring 框架的简化版,通过“自动配置”“起步依赖”等特性,简化 Spring 应用的搭建和开发,减…

Java面试全方位解析:从基础到AI的技术交锋

Java面试全方位解析:从基础到AI的技术交锋 面试场景:互联网大厂Java工程师岗位面试 面试官:您好,我是今天的面试官,接下来我们将进行三轮技术面试。 谢飞机:您好您好!我是谢飞机,特别…

Web Worker:解锁浏览器多线程,提升前端性能与体验

目录 一、Web Worker 是什么? 核心特性 类型 二、为什么需要 Web Worker?(单线程的痛点) 三、Web Worker 的典型使用场景 四、一个简单的代码示例 (专用 Worker) 五、使用 Web Worker 的注意事项 六、总结 一、Web Worker 是什么? 简…

LabVIEW命令行调用与传参功能

该功能一方面借助 Formatinto String 构建命令行字符串,实现LabVIEW 环境下命令行调用 VI 并传参;另一方面,针对 Mac 平台,通过解析应用 Info.plist 文件,处理 LabVIEW 可执行文件路径,完善跨平台命令行调用…

使用FRP搭建内网穿透工具,自己公网服务器独享内外网端口转发

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。简单来说,就是让互联网(外网)设备能访问局域网(内网)设备提…

JavaWeb01——基础标签及样式(黑马视频笔记)

1.如何用VScode写html代码 1. 首先在vscode上安装一些插件,插件如下: 2.打开你要写入的html文件的文件夹,然后右击“ 新建文件”,命名 “xxx.html”, 3.如果是写 css文件,那么也是右击“新建文件”,命名“x…

在2G大小的文件中,找出高频top100的单词

将 2GB 的大文件分割为 2048 个大小为 512KB 的小文件,采用流式读取方式处理,避免一次性加载整个文件导致内存溢出。初始化一个长度为 2048 的哈希表数组,用于分别统计各个小文件中单词的出现频率。利用多线程并行处理机制遍历所有 2048 个小…

基于LNMP分布式个人云存储

1.准备工作a.关闭两台虚拟机的安全软件客户端:[rootmaster ~]# systemctl stop firewalld [rootmaster ~]# systemctl disable firewalld [rootmaster ~]# systemctl status firewalld ○ firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (…

指针运算全攻略:加减、比较与排序

常见的指针指针运算说明1.指针与整数的加减运算对指针可以进行加法运算&#xff0c;即p n或者p - n。其结果依旧是一个是一个指针&#xff0c;新的指针是在原来的地址值基础上加上/减去n *(sizeof(指针指向的数据类型)&#xff09;个字节。示例&#xff1a;#include<stdio.…

物联网安装调试-物联网网关

物联网网关作为连接终端设备与云平台的核心枢纽,其分类与选型需结合功能定位、硬件性能、连接方式及应用场景等多维度考量。以下从分类体系和产品推荐两方面系统梳理,助您高效决策: 🔧 一、物联网网关分类体系 1. 按功能定位划分 类型 核心能力 典型场景 代表产品 边缘计…

Jenkins教程(自动化部署)

Jenkins教程(自动化部署) 1. Jenkins是什么&#xff1f; Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&…

linux 驱动验证是否成功 之 查看moudle信息

这些是 Linux 内核模块&#xff08;.ko&#xff09;中的元信息&#xff08;metadata&#xff09;&#xff0c;可以通过如下方式查看&#xff1a;✅ 1. 使用 modinfo 命令查看已加载或已编译模块信息 示例&#xff1a; modinfo aw2013.ko输出内容大概如下&#xff1a; filename:…

浏览器关闭之前请求接口到后端

2025.07.24今天我学习了如何在浏览器关闭之前请求一个接口返回到后端。可以用performance.navigation判断是浏览器关闭&#xff0c;还是浏览器刷新&#xff0c;因为我这边只需要浏览器关闭的时候才去触发1. 利用performance API&#xff08;刷新检测&#xff09; 刷新页面时&am…

MySQL批量数据处理与事务管理

MySQL是一种广泛应用的关系型数据库管理系统&#xff0c;尤其在数据分析和业务逻辑处理方面具有重要地位。在数据量庞大的业务场景中&#xff0c;批量数据处理和事务管理是提高效率和保障数据一致性的重要手段。掌握高效的批量数据操作方法与事务管理技巧&#xff0c;不仅能够提…