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

【算法笔记】递归与回溯

递归与回溯

To Iterate is Human, to Recurse, Divine.
—L. Peter Deutsch

人理解迭代,神理解递归。
—L. Peter Deutsch

1.什么是递归呢

递归形象描述:

你打开面前这扇门,看到屋里面还有一扇门。
你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。
若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。
然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,
你可以回答出你到底用这你把钥匙打开了几扇门。

2.递归算法(Recursion)

  • 定义:直接或间接地出现对自身的调用。
  • 本质:递归即递进与回归,基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。但必须有一个明确的结束条件(递归出口)
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

//斐波那契
int  f(int n)
{if(n==1)return 1;else  if(n==2)return 1;elsereturn   f(n-1)+f(n-2);
}

利用递归完成的题目特点:

  1. 可以将当前问题转换成规模更小的问题,且新问题和原问题解法完全相同
  2. 有一个明确的递归边界

3.递归案例

**用递归方法求:**1+2+3+……+n=

递归关系:

f(n)=f(n-1)+n; 递归关系
f(1)=1; 递归出口

用递归方法求:n!

递归关系:

f(n)=f(n-1)*n; 递归关系
f(1)=1; 递归出口

4.例题

王小二切饼

题目描述:

王小二自夸刀工不错,有人放一张大的煎饼在砧板上,问他:“饼不许离开砧板,切n(1<=n<=100)刀最多能分成几块?

输入格式:

输入切的刀数n

输出格式:

输出切n刀最多切的块数

输入样例:

3

输出样例:

7

在这里插入图片描述

解题思路

在这里插入图片描述

杨辉三角

在这里插入图片描述

AC代码:

#include<bits/stdc++.h>
using namespace std;
int f(int x,int y)
{printf("调用f(%d,%d)\n",x,y);if(x==y || y==1)return 1;return f(x-1,y-1)+f(x-1,y);
} 
int main()
{int m,n;cin>>m>>n;cout<<f(m,n);return 0;
}

5.程序分析

在这里插入图片描述

在这里插入图片描述

6.【背】核心代码(模板)

递归模板:
void recursion(大规模){if(end_condition){  //递归出口……return;}else{recursion(小规模); //递进,将大规模转换为小规模solve; //回归}
}

7.总结

  1. 递归就是函数自己调用自己
  2. 在递归过程中,必须有一个明确的递归结束条件,即递归出口
  3. 每一次的函数调用都有自己的变量。
  4. 每一次函数调用都会有一次返回。
  5. 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序。
  6. 递归函数中,位于递归调用后的语句和各个被调用函数的顺序相反。

优缺点:
**优点:**实现简单,可读性好;
**缺点:**递归调用,占用空间大;递归太深,易发生栈溢出;可能会出现重复计算的问题(重叠子问题)

相关文章:

【算法笔记】递归与回溯

递归与回溯 To Iterate is Human, to Recurse, Divine. —L. Peter Deutsch 人理解迭代&#xff0c;神理解递归。 —L. Peter Deutsch 1.什么是递归呢 递归形象描述&#xff1a; 你打开面前这扇门&#xff0c;看到屋里面还有一扇门。 你走过去&#xff0c;发现手中的钥匙还可以…...

蓝桥杯备赛——Echarts学习

文章目录前言学习 ECharts 的方法快速上手基础知识option 配置选项可选配置title 标题组件tooltip 提示框组件axisPointer 坐标轴指示器legend 图例组件toolbox 工具栏坐标轴xAxis和yAxisseries &#xff08;[ ]用数组表示,数组里是一个个数据对象&#xff09;饼状图散点图交互…...

动态规划--最长公共子串

最长公共子串公共子串问题费曼算法动态规划算法思路代码实现公共子串问题 在计算机科学中&#xff0c;最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的&#xff0c;而子串却必须是。链接: 百度百科 费曼算法…...

【运筹优化】剩余空间法求解带顺序约束的二维矩形装箱问题 + Java代码实现

文章目录一、带顺序约束的二维矩形装箱问题二、剩余空间法三、完整代码实现3.1 Instance 实例类3.2 Item 物品类3.3 PlaceItem 已放置物品类3.4 Solution 结果类3.5 RSPackingWithWeight 剩余空间算法类3.6 Run 运行类3.7 测试案例3.8 ReadDataUtil 数据读取类3.9 运行结果展示…...

第四阶段15-关于权限,处理解析JWT时的异常,跨域请求,关于Spring Security的认证流程

处理解析JWT时的异常 由于解析JWT是在过滤器中执行的&#xff0c;而过滤器是整个服务器端中最早接收到所有请求的组件&#xff0c;此时&#xff0c;控制器等其它组件尚未运行&#xff0c;则不可以使用此前的“全局异常处理器”来处理解析JWT时的异常&#xff08;全局异常处理器…...

毕业设计 基于51单片机的指纹红外密码电子锁

基于51单片机的指纹红外密码电子锁1、项目简介1.1 系统框架1.2 系统功能2、部分电路设计2.1 STC89C52单片机最小系统电路设计2.2 矩阵按键电路电路设计2.3 液晶显示模块电路设计3、部分代码展示3.1 LCD12864显示字符串3.2 串口初始化实物图1、项目简介 选题指导&#xff0c;项…...

【JavaWeb】数据链路层协议——以太网 + 应用层协议——DNS

以太网 以太网不是一个具体的网络&#xff0c;而是一个技术标准&#xff0c;主要应用于数据链路层和物理层。 以太网数据帧结构 以太网的数据帧结构由三部分构成&#xff1a; 帧头 载荷 帧尾 其中的MAC地址是六位&#xff0c;这样就比IPV4所表示的地址大很多&#xff0c;…...

docker 容器安装 python jre

Dockerfile FROM python:2.7.11-alpine RUN mkdir /usr/local/java WORKDIR /usr/local/java # 5.更改 Alpine 的软件源为阿里云&#xff0c;默认从官方源拉取比较慢 RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \ echo…...

Linux下将C++程序打包成动态库静态库方法

之前在这篇文章里介绍过动态库和静态库的理论部分,这篇文章主要介绍下实际的操作步骤&#xff1a; 静态链接库生成 gcc -c main.cpp -o main.o ar -rc libmain.a main.o sudo cp libmain.a /usr/local/lib 调用即可解释一下上面的命令&#xff1a;前两步生成了libmain.a sudo…...

Centos7 服务器基线检查处理汇总

1、服务器超时设置 问题描叙 TMOUT的值大于key2且小于等于{key2}且小于等于key2且小于等于{key1}视为合规 查看命令&#xff1a;export检测结果 超时时间:0处理方式 备份/etc/profile文件 cp /etc/profile /etc/profile_bak编辑profile文件 vim /etc/profile修改/新增 TMO…...

PaddleOCR遇到 lanms-neo问题处理

在window环境中安装PaddleOCR依赖是真的蛋疼&#xff0c;关键官方论坛里也都没有具体的解决方案。吐槽。。。吐槽。。。 我在 “windows安装lanms-neo问题处理”文章中看到lanms-neo问题全过程解决。个人觉得文档说明不是很细致&#xff0c;导致我按步骤执行&#xff0c;还是安…...

coreldraw2023安装包下载及新功能介绍

对于广告标识业来说 coreldraw这个软件&#xff0c;对我们来说绝对不陌生&#xff0c;我从2008年开始接触到广告制作&#xff0c;到现在已经13多年了&#xff0c;从一开始的coreldraw 9红色的热气球开始。就被这个强大的软件所吸引&#xff0c;他有强大的排榜功能已经对位图的处…...

Nginx 负载均衡服务失败场景

nginx可以配置负载均衡&#xff0c;我们可以通过配置实现nginx负载均衡。这里部署了两个服务producter-one和producter-one2。 upstream proxyproducter-one {server producter-one:8080 weight1;server producter-one2:8080 weight1;}# 访问其他服务server {listen 9090…...

开学季哪个电容笔好?2023口碑最好电容笔推荐

虽说苹果原装的电容笔非常好用&#xff0c;性能也非常不错&#xff0c;但由于价格昂贵&#xff0c;普通的学生是没办法购买的&#xff0c;再加上重量比较大&#xff0c;使用时间长了&#xff0c;难免会让人感觉到疲劳。如果仅仅是为了学习记笔记&#xff0c;那就没必要再去购买…...

经验分享-如何使用http调用chatGPT-3.5-turbo模型API

今天上午&#xff0c;就在工作群里收到了关于openAI发布chatGPT官方模型的消息分享。openAI这次的动作真的很快啊&#xff0c;没想到这么快就直接发布了chatGPT目前所使用的模型api。据Open AI在官方消息&#xff0c;本次开放了ChatGPT和Whisper的模型API&#xff0c;可以供用户…...

【C#】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细

C# 日期转字符串 实例化一个时间字符串 DateTimeFormatInfo dfInfonew DateTimeFormatInfo(); dfInfo.ShortDatePattern "yyyy/MM/dd hh:mm:ss:ffff"; DateTime dt Convert.ToDateTime("2019/07/01 18:18:18:1818", dfInfo);日期转字符串 string dat…...

基于神经网络的滑模鲁棒控制

目录 前言 1.双关节机械手臂模型 2.神经网络自适应律设计 3. 滑模控制律设计 4. 仿真分析 4.1 仿真模型 4.2 仿真结果 4.3 小结 5 学习问题 前言 上一篇文章我介绍了神经网络补偿的机理&#xff0c;只不过控制律不同&#xff0c;本章我们结合滑模理论设计控制律&#…...

2023年融资融券研究报告

第一章 行业概况 融资融券是证券交易市场上的两种金融衍生品交易方式&#xff0c;主要用于股票、债券等证券的融资和投资。 融资是指投资者向证券公司借入资金购买证券&#xff0c;以期望股票价格上涨后卖出获得利润。融资需支付一定的利息和费用&#xff0c;利息根据借入的资…...

Nodejs环境配置 | Linux安装nvm | windows安装nvm

文章目录一. 前言二. Linux Nodejs环境配置1. 安装nvm2. 配置npm三. Windows Nodejs环境配置1. 安装nvm2. 配置npm四. nvm基本使用一. 前言 由于在实际开发中一些不同的项目需要不同的npm版本来启动&#xff0c;所以本篇文章会基于nvm这个node版本管理工具来进行Linux和Winodw…...

显示接口测试

背景需求两个显示器连接到一台PC&#xff0c;期望每台显示器可以单独显示&#xff0c;在一台显示器显示时&#xff0c;另外一台显示器同PC的连接断开&#xff0c;即系统下查看到连接状态为disconnected。同时在显示器上图形化显示当前显示器编号。如下图&#xff0c;期望当显示…...

Tcl_Init error: Can‘t find a usable init.tcl in the following directories

目录 问题 解决 小结 问题 最近在研究开源波形显示软件gtkwave时,Ubuntu18.04下编译打包完成,移植到另一个电脑上运行时,出现以下错误,如图: 擦掉的部分是一些路径信息,这个错误提示意味着您的系统中缺少所需的 Tcl 初始化文件,路径下确实没有init.tcl文…...

进程控制(详解)

进程控制上篇文章介绍了进程的相关概念&#xff0c;形如进程的内核数据结构task_struct 、进程是如何被操作系统管理的、进程的查看、进程标识符、进程状态、进程优先级、已经环境变量和进程地址空间等知识点&#xff1b; 本篇文章接着上篇文章继续对进程的控制进行展开&#x…...

瓜子大王稳住基本盘,洽洽食品做对了什么?

2月24日&#xff0c;洽洽食品披露2022年业绩快报,公司预计实现营收总收入68.82亿元&#xff0c;同比增长14.98%, 实现归母净利润9.77 亿元&#xff0c;同比增长5.21%&#xff0c;业绩基本符合市场预期。来源&#xff1a;洽洽食品2022年度业绩快报2022年&#xff0c;瓜子大王洽洽…...

【音视频安卓开发 (十一)】jni基础

要使用jni开发需要包含jni.h头文件JNIEXPORT JNI : 是一个关键字&#xff0c;不能少&#xff08;编译能通过&#xff09;&#xff0c;标记为该方法可以被外部调用jstring : 代表java中的stringJNICALL: 也是一个关键字&#xff0c;可以少的jni callJNIENV : 这是c和java相互调用…...

通过FRP搭建内网穿透,实现域名访问局域网本机

1我的目标&#xff1a;实现通过域名访问局域网tomcat服务&#xff0c;域名访问方便本地微信调试2思路&#xff1a;&#xff08;1&#xff09;用服务器搭建内网穿透利用FRP实现穿透&#xff0c;frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、…...

Pytorch 代码复现终极指南【收藏】

修改自&#xff1a;https://zhuanlan.zhihu.com/p/532511514我在刚接触pytorch的时候搜到了这个大佬的文章&#xff0c;当时最后天坑部分没有看的太明白&#xff0c;直到今天我也遇到的相同的问题&#xff0c;特来做一点点补充&#xff0c;方便大家理解。上述大佬文章的简版内容…...

iOS 后台运行

背景&#xff1a;app有在后台运行的需求 常用的后台常驻实现方法 1.Audio&#xff08;音乐播放软件&#xff09; 应用在后台播放无声的音频文件&#xff0c;只要播放不断&#xff0c;后台可一直活着&#xff0c;苹果审核人员如果发现&#xff0c;会被拒&#xff0c;有可能会…...

软设下午题第一大题--数据流图(做题)

软设下午第一大题一、数据流图&#xff08;Data Flow Diagram,简称DFD&#xff09;1、基本图形元素元素&#xff08;1&#xff09;外部实体&#xff08;External Agent&#xff09;&#xff08;2&#xff09;数据存储&#xff08;Data Store&#xff09;&#xff08;3&#xff…...

springboot内嵌Tomcat 安全漏洞修复

漏洞扫描提示的是tomcat-embed-core[CVE-2020-1938]&#xff0c;解决方式是升级tomcat的版本。 该漏洞影响的版本&#xff1a; Apache Tomcat 9.x < 9.0.31 Apache Tomcat 8.x < 8.5.51 Apache Tomcat 7.x < 7.0.100 Apache Tomcat 6.x 其余的安全漏洞也可以通过…...

Android OTA 相关工具(三) A/B 系统之 bootctl 工具

文章目录1. bootctl 的编译2. bootctl 的帮助信息3. bootctl 的用法1. hal-info2. get-number-slots3. get-current-slot4. mark-boot-successful5. set-active-boot-slot6. set-slot-as-unbootable7. is-slot-bootable8. is-slot-marked-successful9. get-suffix10. set-snaps…...

建设个商城网站需要多少钱/新型营销方式

Mybatis-Plus提供了多种方式进行多表查询&#xff0c;其中注解方式是其中的一种。以下是几个使用注解方式进行多表查询的例子&#xff1a; 1.一对一查询 假设我们有两张表&#xff1a;user表和address表&#xff0c;每个用户对应一个地址&#xff0c;这是一个典型的一对一关系…...

wordpress如何实时刷新数据库/河北seo平台

最近在数据库优化的时候&#xff0c;看到一些表在设计上使用了text或者blob的字段&#xff0c;单表的存储空间已经达到了近100G&#xff0c;这种情况再去改变和优化就非常难了一、简介为了清楚大字段对性能的影响&#xff0c;我们必须要知道innodb存储引擎的处理方式&#xff1…...

网站建设安全/seo从零开始到精通200讲解

服务器修改管理口地址 内容精选换一换云平台支持修改主网卡的私有IP地址&#xff0c;具体操作请参见本节内容。如需修改扩展网卡的私有IP地址&#xff0c;请删除网卡&#xff0c;并挂载新网卡。弹性云服务器已关机。如果网卡绑定了虚拟IP或者DNAT规则&#xff0c;需要先解绑。如…...

廊坊高端网站制作/哪些网站可以免费申请域名

黑苹果安装各种问题解决办法参考文章&#xff1a; &#xff08;1&#xff09;黑苹果安装各种问题解决办法 &#xff08;2&#xff09;https://www.cnblogs.com/xc1234/p/9047947.html &#xff08;3&#xff09;https://www.codeprj.com/blog/8a0f8b1.html 备忘一下。...

厦门网站建设报价/公司关键词排名优化

题目大意 有一个\(n*m\)&#xff08;\(n,m\leq10^9\)&#xff09;的网格&#xff0c;每个格子是空地或障碍&#xff08;\(障碍数\leq10^5\)&#xff09; 定义两块空地连通&#xff0c;当且仅当它们是“相邻的两块空地”或“存在一块空地与这两块空地连通的两块空地”&#xff0…...

上海做网站的价格/郑州seo优化推广

创建矩阵的操作 x torch.empty(5, 3) print(x) 输出结果: tensor([[2.4835e27, 2.5428e30, 1.0877e-19],[1.5163e23, 2.2012e12, 3.7899e22],[5.2480e05, 1.0175e31, 9.7056e24],[1.6283e32, 3.7913e22, 3.9653e28],[1.0876e-19, 6.2027e26, 2.3685e21]])创建一个有初始化的矩…...