C++递推基础知识
文章目录
- 一、递推的概念
- 二、递推和递归的区别
- 三、递推的实例
- 1、最基础的:斐波那契数列
- 2、变形版斐波那契数列
- 3、较复杂的递推式求解:昆虫繁殖
- 4、经典逆推问题:题目数量
一、递推的概念
1、什么是递推算法?
递推算法:是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。
简单来说,就是你今天的成果是和昨天以及前天的努力有关系的
2、解决递推问题的一般形式
(1)建立递推关系式;
(2)确定边界条件(即初始值);
(3)递推求解。
二、递推和递归的区别
1、从程序上看,递归表现为自己调用自己,递推则没有这样的形式。
2、递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题 是逆向的。递推是从简单问题出发,一步步的向前发展,最终求得问题。是正向的。
3、递归中,问题的n要求是计算之前就知道的,而递推可以在计算中确定,不要求计算前就知道n。
三、递推的实例
1、最基础的:斐波那契数列
问题描述:Fibonacci 数列的代表问题是由意大利著名数学家 Fibonacci 于 1202年提出的“兔子繁殖问题” (又称“Fibonacci 问题”)引出的。一个数列的第 0 项为 1,第 1 项为 1,以后每一项都是前两项的和,这个数列就是著名的斐波那契数列,求斐波那契数列的第 N 项。由问题,可写出如下所示递推方程:
#include<iostream>
using namespace std;
int main() { int a[1000],n; cin>>n; a[0]=a[1]=1; for(int i=2;i<=n;i++) {a[i]=a[i-1]+a[i-2];//递推式} cout<<a[n];return 0;
}
2、变形版斐波那契数列
有一组序列的数值是:1、2、9、33、126、477…请同学们认真观察数值的规律。现要求:指定项数为任意的可项,计算:
1)第 N项的数据:
2)输出前N项数据的和
输入:只有一行,包含1个整数(其中 3<=N<=15)为这个序列的项数。
输出:两行。
第一行为这个序列第N项的数据。
第二行为这个序列前N项的数据和。
[样例输入]6
[样例输出]477
648
解题思路:前两项和的3倍是第三项
#include<iostream>
using namespace std;
int main() { int a[50]={0},n,sum=0;cin >> n;a[1]=1;//从下标为1开始,所以最后输出的结果是a[n]for(int i=3;i<=n;i++) a[i]=(a[i-1]+a[i-2])*3;//递推式for(int i=1;i<=n;i++) sum+=a[i];//求前N项和cout<<a[n]<<endl<<sum;return 0;
}
3、较复杂的递推式求解:昆虫繁殖
问题描述: 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过 X 个月产 Y 对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过 X 个月产卵),问过 Z 个月以后,共有成虫多少对?
【输入格式】输入 X,Y,Z 的数值(0=<X<=20,1<=Y<=20,X=<Z<=50)。
【输出格式】输出过 Z 个月以后,共有成虫对数
样例输入:1 2 8
样例输出:37
一定要找出递推公式
算法分析:本月成虫数量 = 上月成虫数量 + 两个月前新增卵的数量新增卵的数量 = 上月成虫数量 * 2(Y 的值)
#include <iostream>
using namespace std;
int main(){long long a[101] = {0}, b[101] = {0};int x, y, z;cin >> x >> y >> z;for(int i =1; i <= x; i++){a[i] = 1;b[i] = 0;} for(int i= x + 1; i <= z + 1; i++){b[i] = y * a[i-x];//重点在这里a[i] = a[i-1] + b[i-2];//重点在这里}cout << a[z+1] << endl;return 0;
}
4、经典逆推问题:题目数量
问题描述:N 名同学争做计算题,规定做完一道才能做第二道,比赛后统计发现:第一位同学做了总数的一半多 1 道,第二位同学做了余下的一半多 2 道,第三位同学做了再余下的一半多 3 道,以此类推,第 N-1 位同学做了余下的一半多 N-1道,最后一位同学做了 N 道。输入学生的数量 N,求共有多少道题目?
样例输入:4
样例输出:66
算法分析:
第 n 名学生做题时还剩题目数量为:N
第 n-1 名学生做题时还剩题目数量为: (N+N-1)*2
第 N-2 名学生做题时还剩题目数量为:((N+N-1)*2+N-2)*2
……
通过以上分析,可以发现:
边界条件为 F1=N
递推关系式为 Fn-1=(Fn+N-1)*2
#include <iostream>
using namespace std;
int main(){int n, f[101]={0};cin >> n;f[n]=n;while(n>=0){f[n-1]=(f[n]+n-1)*2;n--;}cout << f[1];return 0;
}
相关文章:
C++递推基础知识
文章目录一、递推的概念二、递推和递归的区别三、递推的实例1、最基础的:斐波那契数列2、变形版斐波那契数列3、较复杂的递推式求解:昆虫繁殖4、经典逆推问题:题目数量一、递推的概念 1、什么是递推算法? 递推算法:是…...
【Python入门第十天】Python 布尔
布尔表示两值之一:True 或 False。 布尔值 在编程中,通常需要知道表达式是 True 还是 False。 可以计算 Python 中的任何表达式,并获得两个答案之一,即 True 或 False。 比较两个值时,将对表达式求值,P…...
WebDAV之π-Disk派盘+Piktures
Piktures支持WebDAV方式连接π-Disk派盘。推荐一款简单易用,功能超级强大的智能相册应用。Piktures智能相册是一款简单易用,功能超级强大的智能相册应用,它不仅可以访问本地和云照片,还可以照片编辑器,而且它同时还是一…...
Revit问题:Navisworks中导入的rvt模型角度不正确调整
一、Navisworks中导入的rvt模型角度不正确调整方法 通常情况下,我们做好一个Revit模型,有时候出于成果保护或者鉴于Revit自带的碰撞检测效果不够直观、Revit模型体量太大,需要一个轻量化的模型展示,我们通常情况下会使用Autodesk公…...
最全正则验证
一、校验数字的表达式 1. 数字:^[0-9]*$ 2. n位的数字:^\d{n}$ 3. 至少n位的数字:^\d{n,}$ 4. m-n位的数字:^\d{m,n}$ 5. 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6. 非零开头的最多带两位小数的数字:…...
阿里云服务器入门使用流程 新手学习教程
一、阿里云根据个人需要选合适的云服务器,选好cpu、内存、带宽,地域,这四个是主要的。其他可以默认选择。 二、登陆控制台 输入账号密码,进去看到服务界面,新手可能不容易看懂。点击左侧菜单,点击云服务器…...
git学习
一.实际场景 数据备份代码还原协同开发追溯问题代码的编写人和编写时间 二.Git工作流程图 三.获取本地仓库 四.git add和git commit git status:查看修改的状态(暂存区,工作区) git add . :通配符,添加当…...
新建一个完整的react项目和完善初始项目
一:新建一个完整的react项目 1.环境准备 目前我的环境是 node:16.17.1 npm: 8.15.0 查看环境:1):打开命令提示符工具,利用node -v和npm -v 查看一下自己的环境,如果觉得重新卸载、安装node比较…...
HIVE 安装
目录 启动hadoop 把hive压缩包拷贝到虚拟机里面 解压 改名 配置环境变量 新建一个hive-site.xml文件,并编辑 配置文件 添加jar包 初始化mysql 启动hive 创建数据库 使用数据库 创建表 添加数据 查看数据 删除表 安装虚拟机 安装JDK 安装Hadoop …...
jsp游泳馆门票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 jsp游泳馆门票管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,…...
C++ ---智能指针详解
文章目录前言一、 为什么需要智能指针?二、内存泄漏2.1 什么是内存泄露?危害是什么?2.2 内存泄露的分类2.3 如何避免内存泄露三、智能指针的使用及原理3.1 RAII3.2 智能指针的原理3.3 std::autoptr3.4 std::unique_ptr3.5 std::shared_ptrstd::shared_ptr的循环引…...
企业带宽控制管理
在企业中保持稳定的网络性能可能具有挑战性,因为采用数字化的网络可扩展性和敏捷性应该与组织的发展同步。随着基础设施的扩展、新应用和新技术的引入,网络的带宽容量也在增加。 停机和带宽过度使用是任何组织都无法避免的两个问题,为了解决…...
MybatisPlus实现分页效果并解决错误:cant found IPage for args!
前言 早就知道MybatisPlus对分页进行了处理,但是一直没有实战用过,用的是自己封装的一个分页组件,虽不说麻烦吧,但是也不是特别简单。 写起来还是比较复杂,但是最近这个组件有了点小小的bug,我决定是时候…...
C语言赋值(关系)运算符和逗号运算符
一.赋值(关系)运算符 1.关系运算符 高优先级组 < 左边值小于右边值,则返回1。否则返回0 < 左边值小于等于右边值,则返回1。否则返回0 > 左边值大于右边值,则返回1。否则返回0 > 左边值大于等于右边值,则返回1。否则返回0 低优先级组…...
几种在Linux/window下查询外网IP的办法。
hello world curl ifconfig.me/ip如下图 1. 纯文本 https://ifconfig.me/ip https://ipinfo.io/ip 或 https://ipecho.net/ip 或 https://ipecho.net/plain https://www.trackip.net/ip https://icanhazip.com 2. JSON格式 https://ifconfig.me/all.json https://ipi…...
【nodejs-05】黑马nodejs学习笔记05-数据库基本操作01
文章目录3.MySQL的基本使用3.1 使用 MySQL Workbench 管理数据库3.2 使用 SQL 管理数据库3.3 SQL 的 SELECT 语句3.4 SQL 的 INSERT INTO 语句3.5 SQL 的 UPDATE 语句3.6 SQL 的 DELETE 语句3.7 SQL 的 WHERE 子句3.8 SQL 的 AND 和 OR 运算符3.9 SQL 的 ORDER BY 子句3.10 SQL…...
零基础、学历无优势、逻辑能力一般”,能转行做程序员吗?
此前,拉勾数据研究院对程序员群体做了一次深入调查,并发布了《2022程序员群体职场洞察报告》,报告显示,“高薪”依然是程序员的职业标签之一。 在调查的程序员群体中,年薪在10-30万元之间的人数占比为66.7%࿰…...
第五章.与学习相关技巧—Batch Normalization
第五章.与学习相关技巧 5.3 Batch Normalization Batch Norm以进行学习时的mini_batch为单位,按mini_batch进行正则化,具体而言,就是进行使数据分布的均值为0,方差为1的正则化。Batch Norm是调整各层激活值的分布使其拥有适当的广…...
Zynq非Video Mixer方案实现视频叠加输出,无需SDK配置,提供工程源码和技术支持
目录1、前言2、Video Mixer的不便之处3、FDMA取代Video Mixer实现视频叠加输出4、Vivado工程详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 关于Zynq使用Video Mixer方案实现视频叠加输出方案请参考点击查看:Video Mixer方案 对于Zynq和Micr…...
从零实现Web服务器(二): 线程池以及线程池的作用,Get和Post的区别,项目中如何编写数据库连接池,定时器优化非活跃连接
文章目录一、线程池以及线程池的作用二、手写线程池三、Get和Post的区别四、如何编写数据库连接池五、定时器优化非活跃连接5.1. 基于排序链表实现。5.2. 基于小根堆实现。5.3. 基于红黑树实现。5.4. 基于时间轮实现。5.4.1 单时间轮实现5.4.2 多时间轮实现一、线程池以及线程池…...
为什么伟大的产品只专注做一件事
uber 不允许你预订出租车。亚马逊一开始只是卖书。谷歌只是一个搜索引擎。麦当劳没有餐具。不知为什么,我们仍然相信一个产品要想成功,它必须做很多事情。这通常发生在两种情况下:当新产品试图让市场相信它们是值得的,或者当公司提…...
pycharm远程连接服务器,并单步调试服务器上的代码
每天都有不同的朋友来Push我 那如果比较健忘的话,为啥不问一下chatGPT呢 问题的缘由在我想在本地单步调试代码。。。 我的代码完全在云端服务器的,还有数据集都是,但实际上本地代码可以通过pycharm给他传上去。 但是在后面配置的时候需要两…...
JVM05 方法区
Person:存放在元空间,也可以说方法区 person:存放在Java栈的局部变量表中 new Person():存放在Java堆中 1.方法区的理解 方法区主要存放的是 Class,而堆中主要存放的是 实例化的对象 方法区(Method Area…...
盘点3个.Net开发的WMS仓库管理系统
更多开源项目请查看:一个专注推荐.Net开源项目的榜单 仓库管理系统在企业中,重要性越来越高,不仅可以提高效率,还能降低企业的压力,企业通过协调和优化资源使用和物料流动,能极大程度地提升了管理效率&…...
Linux下Java项目开机自动启动
Linux下Java项目开机自动启动1、在Linux上设置开机启动Java程序,例如:test.jar在Linux上启动Java程序的命令:2、可以将程序启动的指令做成一个shell脚本,简单的做法创建一个test.sh文件,内容如下:3、最重要的一步就是修…...
基于SpringBoot的智慧社区网站
文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...
数据分析与SAS学习笔记3
SAS在最新的展示图,表现力比较丰富。 SAS的处理流程: 数据步 过程步: ETL是数据分析非常重要的步骤。70%-90%花在收集数据以及整理数据,数据分析数据的时间不是很多的。 一个完整的数据步和过程步: 数据步基本语句总…...
天干地支蓝桥杯国赛
题目 分析 蓝桥杯国赛2020简单模拟题,你敢信,就是弄两个字符串数组。重点在于知道0000年是从哪个天干和地支开始的。 代码 #include <iostream> using namespace std;int year;int main() {cin >> year;string tiangan[10] {"geng&…...
Source lnsight工具的简单使用
多文件编程推荐用Source lnsight工具来进行编写 一、Source lnsight工具的简单使用 1、在桌面上新建一个文件夹factory,在文件夹里新建一个cat.c文件和si文件夹 2、打开Source lnsight工具,点击上方Project--->New Project 3、把文件夹factory中si文…...
100个变态的软件测试面试题及答案!——看完变态面试官对你竖起大拇指!
【纯干货!!!】花费了整整3天,整理出来的全网最实用软件测试面试大全,一共30道题目答案的纯干货,希望大家多多支持,建议 点赞!!收藏!!长文警告&…...
wordpress底部链接修改/网站怎么建设
本来是准备安装Maatkit的,不过Maatkit已经成为了percona-toolkit的一部分,所以干脆直接安装percona-toolkit。准备安装环境(非常重要),由于percona-toolkit需要perl环境,所以你懂得,它需要什么我…...
自学做网站的/网页搭建
返璞归真,代码规范也是一门艺术 黄金定律 永远遵循同一套编码规范 -- 可以是这里列出的,也可以是你自己总结的。如果你发现本规范中有任何错误,敬请指正。通过open an issue on GitHub为本规范添加或贡献内容。 不管有多少人共同参与同一项目…...
网站自动采集更新/百度app下载最新版
【Morty】普通人改变命运的秘密!我的观点可能会颠覆你的认知_哔哩哔哩_bilibili 非常感谢UP,你的每个视频我都看了,给我启示最大的是《为什么你总是那么穷》,这些年一直走背运,加上20年创业失败了,已经身无…...
设计公司名字创意/上海优化seo
区块链技术被誉为第四次工业革命代表性成果之一,“最有潜力触发第五轮颠覆性革命浪潮的核心技术”,代表着互联网的未来,具有划时代意义。它被认为是与1975年的个人计算机、1993年的因特网同样具有革命性的信息技术突破。 日前,全…...
wordpress 快速填写qq/百度关键词优化和百度推广
一、示例概述本篇博客的示例比较简单,其实就是使用Runtime的方法交换来实现AOP面向切面编程。下方这两个文件就是我们本篇博客所涉及的核心文件。TestClass顾名思义就是我们的测试类,而TestClassLogging就是TestClass的切片,TestClassLogging…...
长春建设局网站/seo招聘
记下吧,省得又忘记。Java配置环境变量,在系统变量内新建,若存在则编辑JAVA_HOMEC:\Program Files\Java\jdk1.6.0_29Path%JAVA_HOME%/bin;%JAVA_HOME%/jre/binjavah生成.h进入工程目录下的...\bin\classesjavah -classpath 包名.类名也可看jav…...