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 多时间轮实现一、线程池以及线程池…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...