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

“蓝桥杯”递推和递归(一)——取数位

1. 算法简介

递推和递归虽然叫法不同,但它们的基本思想是一致的,在很多程序中,这两种算法可以通用,不同的是递推法效率更高,递归法更方便阅读。

(1)递推法

递推法是一种重要的数学方法,同时也是计算机进行数值计算的个重要算法。
递推法的核心是找到计算前后过程之间的数量关系,即递推式。递推式往往根据已知条件和所求问题之间存在的某种相互联系推导得出。递推计算时,需要将复杂运算转换为若干步重复的简单运算,这样可以发挥计算机擅于重复处理数据的特点。递推法避开了求通项公式的麻烦,把一个复杂问题的求解分解成了连续的若干歩简单运算,可以将递推法看成一种特殊的迭代算法。
[案例解析]铺方格
有2×n个长方形的方格,用一个1×2的骨牌铺满方格。例如当0=3时为2×3方格,骨牌的铺放方案有3种,

 骨牌铺设方案(1)
编写一个程序,试对给出的任意一个n(n>0)输出铺法总数。针对这个问题,要想直接获得问题的解答是相当困难的。可以用递推法,从简单到复杂逐步归纳出问题解的一般规律。分析过程如下。
当n=1时,只能有一种铺法 ,如图4-2(a)所示,铺法总数为X1=1。
当n=2时,骨牌可以并列竖排,也可以并列横排,再无其他排列方法,如图2(b)所示,铺法总数为X2 =2。
当n=3时,骨牌可以全部竖排,也可以认为在方格中已经有一个竖排骨牌、需要在方格中排列两个横排骨牌(无重复方法),若已经在方格中排列两个横排骨牌,则必须在方格中排列一个竖排骨牌,如图2(c)所示,再无其他排列方法,铺法总数为X3= 3。

 

骨牌铺放方案(2)
由此可以看出,当n=3时,排列骨牌的方法数是n=1和n=2时排列方法数之和。
推出一般规律,对一般的n,要求Xn。可以这样考虑:若第一个骨牌是竖排列,则剩下n-1个骨牌需要排列,这时排列方法数为Xn-1,若第一个骨牌是横排列,则整个方格至少有2个骨牌是横排列(1×2骨牌),因此剩下n-2个骨牌需要排列,这时排列方法数为Xn-2从第一种骨牌排列方法考虑,只有这两种可能,所以有:

Xn=Xn-1+Xn-2(n> 2)

X1=1

X2=2

Xn=Xn-1+ Xn-2就是问题求解的递推公式


任意n都可以从中获得解答。
例如n=5,

X3=X2+X1=3

X4=X3+X2=5

X5=X4+X3=8


利用程序表示为:

cin>>n;  
a[1]=1;a[2]=2;  
for(i=3;i<=n; i++)
a[i]=a[i-1]+a[i-2];
cout<<a[n]<<"";

(2)递归法

在计算机科学中,如果某个函数的实现中出现了对函数自身的调用语句,则称该函数为递归函数。
递推法可以用递归函数实现。一般来说,循环递推法比递归函数的速度更快,但递归函数的可读性更强。
例如,上述平铺方格问题改写成递归函数的形式如下。

int pu(int n)
{
if(n==1) return 1;
if(n==2) return 2;
return pu(n-1) +pu(n-2);
}

递归函数在它的函数体内直接或者间接地调用自身,每调用一次,就进入新的一层。递归函数必须有结束递归的条件。函数会一直递推 ,直到遇到结束 条件返回,递归函数调用的一般过程如图3所示,这里以n=6为例。

 递归函数的调用过程

2.  取数位(2017年试题E)

【问题描述】
求一个整数的第k位数字有很多种方法,以下下方法就是其中一种。
//求x用十进制表示时的数位长度


int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
//取x的第k位数字
int f(int x, int k) {
if(len(x)-k==0) returnx%10;
return (     )  ;//填空
}
int main()
int x= 23574;
printf("&d\n", f(x,3));
return 0;
}

对于题目中的测试数据,应该打印5。
请仔细分析源码,并补充画线部分缺少的代码。
注意:只提交缺失的代码,不要填写任何已有内容或说明性文字。

答案——取数位

  //求 x 用十进制表示时的数位长度int len(int x){if(x<10) return 1;return len(x/10)+1;}//取 x 的第 k 位数字int f(int x, int k) {if(len(x)-k==0) return x%10;return f(x/10,k) ;//填空}int main()int x= 23574;printf("&d\n", f(x,3));return 0;}

相关文章:

“蓝桥杯”递推和递归(一)——取数位

1. 算法简介 递推和递归虽然叫法不同&#xff0c;但它们的基本思想是一致的&#xff0c;在很多程序中&#xff0c;这两种算法可以通用&#xff0c;不同的是递推法效率更高&#xff0c;递归法更方便阅读。 &#xff08;1&#xff09;递推法 递推法是一种重要的数学方法&#…...

蓝桥杯·3月份刷题集训Day02

本篇博客旨在记录自已打卡蓝桥杯3月份刷题集训&#xff0c;同时会有自己的思路及代码解答希望可以给小伙伴一些帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误之处&#xff0c;希望小伙伴们可以在评论区指出来&#xff0c;共勉&#x1f4aa;。 文…...

python --获取内网IP地址

方法一 import socketdef get_local_ip_address():ip_address try:# 获取本机主机名hostname socket.gethostname()# 获取本机IPip_address socket.gethostbyname(hostname)except:passreturn ip_address方法二 import subprocessdef get_local_ip_address():ip_address …...

如何衡量你的Facebook广告活动的成功

投入大量资金和资源在Facebook广告上并不总能带来预期的回报&#xff0c;这很可能是由于缺乏恰当的衡量广告活动成功的方法。在这篇文章中&#xff0c;我们将介绍一些关键的指标&#xff0c;帮助你更好地了解如何衡量你的Facebook广告活动的成功。1.费用每次点击&#xff08;CP…...

Linux对一个目录及其子目录所有文件添加权限

1、chmod指令 chmod是一个改变用户拥有指定文件的权限的命令.r:只读,w:写,x执行.也可以用数字 -rw------- (600) -- 只有属主有读写权限。 -rw-r--r-- (644) -- 只有属主有读写权限&#xff1b;而属组用户和其他用户只有读权限。 -rwx------ (700) -- 只有属主有读、写、执…...

宝刀未老?低代码何德何能受大厂们的推崇

风口之下&#xff0c;低代码蓬勃发展&#xff0c;本文从国内低代码的走红现象引入&#xff0c;浅析低代码发展中的变化趋势&#xff0c;重点探讨如此趋势之下&#xff0c;国内大厂如何通过低代码实现了良性发展。 一、国内爆火的低代码 据Gartner最新报告显示&#xff0c;到2…...

智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)

摘要&#xff1a;智能扑克牌识别软件利用视觉方法检测和识别日常扑克牌具体花色与数字&#xff0c;快速识别牌型并标注结果&#xff0c;帮助计算机完成扑克牌对战的前期识别步骤。本文详细介绍基于深度学习的智能扑克牌识别软件&#xff0c;在介绍算法原理的同时&#xff0c;给…...

SQL优化13连问,收藏好!

1.日常工作中&#xff0c;你是怎么优化SQL的&#xff1f; 大家可以从这几个维度回答这个问题&#xff1a; 分析慢查询日志 使用explain查看执行计划 索引优化 深分页优化 避免全表扫描 避免返回不必要的数据&#xff08;如select具体字段而不是select*&#xff09; 使用…...

【小技巧】公式从docx文件复制到doc文件变成了图片怎么办?

文章目录0、word文件后缀命名1、docx和doc默认的公式编辑方式2、MathTpye公式编辑器3、MathType 运行时错误‘53’&#xff1a;文件未找到&#xff1a;MathPage.WLL4、结束语0、word文件后缀命名 1997-2003的旧版本文件名后缀是.doc   从2007版以后&#xff0c;后缀名是.docx…...

Python3入门与进阶笔记(六):初识类

目录 一些解释 属性 类名建议首字母大写&#xff0c;通常用驼峰规则命名。变量名建议小写&#xff0c;下划线隔开。类最基本的作用是封装。 写在类内非方法中的语句在类加载的时候会执行&#xff0c;且只会执行一次&#xff0c;例如下面的print语句&#xff0c;类加载时就会…...

Prometheus监控实战系列九:主机监控

Prometheus使用各种Exporter来监控资源。Exporter可以看成是监控的agent端&#xff0c;它负责收集对应资源的指标&#xff0c;并提供接口给到Prometheus读取。不同资源的监控对应不同的Exporter&#xff0c;如node-exporeter、mysql-exporter、kafka-exporter等&#xff0c;在这…...

JVM知识整理

JVM知识整理 JVM的主要组成部分 JVM包含两个两个子系统&#xff08;类加载子系统和执行引擎&#xff09;和两个组件&#xff08;运行时数据区与和本地库接口&#xff09; 类加载子系统&#xff1a;根据给定的全限定类名来加载class文件到运行时数据区域中的方法区。执行引擎&a…...

【C++】二叉搜索树

A:你长大后想要做什么&#xff1f; B:写下“快乐”…… A:不&#xff0c;你理解错我的意思了&#xff0c;我是说 B:不&#xff0c;是你理解错了人生…… 文章目录一、二叉搜索树的实现1.struct TreeNode{}2.迭代版本2.1 Insert()插入结点&#xff08;解决链接的问题&#xff09…...

leetcode -- 21. 合并两个有序链表

&#x1f428;目录&#x1f4d1;1. 题目&#x1f6f6;2. 解法- 头插到新链表&#x1f42c;2.1 思路&#x1f42c;2.1 代码实现⛵3. 解法优化 - 带哨兵位&#x1f40b;3.1 思路&#x1f40b;3.2 代码实现&#x1f6a4;4. 题目链接&#x1f4d1;1. 题目 将两个升序链表合并为一个…...

计算机组成原理|第四章(笔记)

目录第四章 存储器4.1 概述4.1.1 存储器分类4.1.2 存储器的层次结构4.2 主存储器4.2.1 概述4.2.2 半导体存储芯片简介4.2.3 随机存取存储器&#xff08;RAM&#xff09;4.2.4 只读存储器&#xff08;ROM&#xff09;4.2.5 存储器与CPU的连接4.2.6 存储器的校验4.2.7 提高访存速…...

【Unity3D-BUG记录】Unity3D中出现“动画片段必须标记为Legacy的警告”消除方法

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中可能会遇到下面的警告&#xff1a; The AnimationClip…...

Spring Bean的定义(含创建Bean的三种方式)

&#x1f3c6; 文章目标&#xff1a;复习和理解下Spring Bean的定义 &#x1f340; Spring Bean的定义&#xff08;含创建Bean的三种方式&#xff09; ✅ 创作者&#xff1a;Jay… &#x1f389; 个人主页&#xff1a;Jay的个人主页 &#x1f341; 展望&#xff1a;若本篇讲解内…...

vue的路由-vue router(一)

vue的路由-vue router一、路由的基本使用HTMLrouter-linkrouter-viewJavaScript二、带参数的动态路由匹配三、嵌套路由四. 编程式导航导航到不同的位置替换当前位置横跨历史篡改历史五. 命名路由六. 命名视图嵌套命名视图七. 重定向和别名重定向别名八. 将 props 传递给路由组件…...

DevOps流水线搭建-PHP版本

一、介绍流水线发布代码1、官网https://www.jenkins.io/zh2、kubesphere里的介绍https://kubesphere.io/zh/docs/v3.3/devops-user-guide/how-to-use/pipelines/choose-jenkins-agent/3、git仓库可以自己写点测试代码&#xff0c;提交&#xff0c;待会测试用https://gitee.com/…...

C语言之按位取反~(七十一)

计算机存储数据基本知识计算机中二进制数包括&#xff08;正数和负数&#xff09;是以补码形式存储。符号位&#xff1a;补码的最左侧首位是符号位&#xff0c;0表示正数&#xff0c;1表示负数。二进制有三种形式&#xff1a;原码、反码、补码。正数的补码和反码&#xff1a;是…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...