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

递推算法及常见示例(C++、Python实现)

递推算法及常见示例(C++、Python实现)

递推算法是一种用若干步可重复运算来描述复杂问题的方法,它是一种序列计算中的常用算法。通常是通过计算前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。递推关系通常表示为一种递推公式。

下面是一些常见的例子。

★斐波那契数列:斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,55,89...

这个数列从第3项开始,每一项都等于前两项之和。

斐波那契数列是一种经典的递推问题,它的定义是:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)。通过这个递推关系式,可以求解斐波那契数列的第 n 项。

☆C++实现:

#include <iostream>  
using namespace std;  int main() {  int n;  cout << "请输入项数 n 的值: ";  cin >> n; if (n <= 1) {  return n;  }  int f1 = 0, f2 = 1, fn;  for (int i = 2; i <= n; i++) {  fn = f1 + f2;  f1 = f2;  f2 = fn;  }  cout << "斐波那契数列的第 " << n << " 项为:" << fn << endl;  return 0;  
}

下面改用使用自定义函数实现:

#include <iostream>  
using namespace std;  int fibonacci(int n) {  if (n <= 1) {  return n;  }  int f1 = 0, f2 = 1, fn;  for (int i = 2; i <= n; i++) {  fn = f1 + f2;  f1 = f2;  f2 = fn;  }  return fn;  
}  int main() {  int n;  cout << "请输入项数 n 的值: ";  cin >> n;  cout << "斐波那契数列的第 " << n << " 项为:" << fibonacci(n) << endl;  return 0;  
}

☆Python实现:

n = int(input("请输入 n 的值:"))
if n <= 1:  fn = nf1, f2 = 0, 1 for i in range(2, n+1):  fn = f1 + f2  f1, f2 = f2, fnprint("斐波那契数列的第 {} 项为:{}".format(n, fn))

下面改用使用自定义函数实现:

def fibonacci(n):  if n <= 1:  return nf1, f2 = 0, 1 for i in range(2, n+1):  fn = f1 + f2  f1, f2 = f2, fn  return fn  n = int(input("请输入 n 的值:"))  
print("斐波那契数列的第 {} 项为:{}".format(n, fibonacci(n)))

★等差数列求和: 1, 3, 5, 7, 9 是一个公差为 2 的等差数列。等差数列的求和问题可以通过递推算法解决。设等差数列的首项为 a1,公差为 d,第 n 项为 an,则 an=a1+(n-1)d。要求等差数列的前 n 项和,可以递推得到:Sn=a1+a2+...+an=n/2[2a1+(n-1)d]。

☆C++实现:

#include <iostream>  
using namespace std;int main() {  int a1, d, n;  cout << "输入第一项、公差和项数:";  cin >> a1 >> d >> n;  int sum = 0;  for (int i = 1; i <= n; i++) {  sum += a1 + (i - 1) * d;  }  cout << "等差数列的前 " << n << " 项和为:" << sum << endl;  return 0;  
}

☆Python实现:

a1 = int(input("输入第一项: "))  
d = int(input("输入公差: "))  
n = int(input("输入项数: "))  
sum = 0  
for i in range(1, n+1):  sum += a1 + (i - 1) * dprint("等差数列的前 {} 项和为:{}".format(n,sum))

★等比数列求和:1, 2, 4, 8, 16 是一个公比为 2 的等比数列。等比数列的求和问题也可以通过递推算法解决。设等比数列的首项为 a1,公比为 r,第 n 项为 an,则 an=a1r^(n-1)。要求等比数列的前 n 项和,可以递推得到:Sn=a1(1-r^n)/(1-r)。

☆C++实现:

#include <iostream>
#include <cmath> // 引入 pow()
using namespace std;int main() {    double a1, r, n;    cout << "输入第一项、公比和项数:";    cin >> a1 >> r >> n;    double sum = 0;    for (int i = 1; i <= n; i++) {    sum += a1 * pow(r, i - 1);    }    cout << "等比数列的前 " << n << " 项和为:" << sum << endl;    return 0;    
}

☆Python实现:

a1 = float(input("输入第一项:"))  
r = float(input("输入公比:"))  
n = int(input("输入项数:"))  sum = 0  
for i in range(1, n + 1):  sum += a1 * (r ** (i - 1))  print("等比数列的前 {} 项和为:{}".format(n, sum))

、递推、递归和迭代区别

递推是通过已知序列元素来计算其他元素,递归是函数调用自身,迭代是通过重复执行操作来解决问题。

递归和迭代可参见:https://blog.csdn.net/cnds123/article/details/132409886

相关文章:

递推算法及常见示例(C++、Python实现)

递推算法及常见示例&#xff08;C、Python实现&#xff09; 递推算法是一种用若干步可重复运算来描述复杂问题的方法&#xff0c;它是一种序列计算中的常用算法。通常是通过计算前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次…...

vscode调试程序设置

主要设置和json内容如下&#xff1a; cpp_properties.json内容&#xff1a; {"configurations": [ //C intellisense插件需要这个文件&#xff0c;主要是用于函数变量等符号的只能解析{"name": "Win32","includePath": ["${work…...

电商邮件营销攻略:教你如何有效运营邮件营销策略!

作为一种领先的营销渠道&#xff0c;电子邮件营销已被电子商务公司作为推动客户参与度、促进销售和提高ROI的不可或缺的方式。在这篇文章中&#xff0c;我们将深入探讨电子商务公司为什么要做EDM邮件营销&#xff1f;以及电商公司怎么做邮件营销&#xff1f; 一、电子商务公司…...

centos+jenkins+pycharm

思路&#xff1a;架构 一. 在centos上搭建jenkins环境 二. pycharm与gitee建立连接 三. 访问jenkins&#xff0c;添加任务 3.1 添加一个自由风格的任务 3.2 添加git项目路径及访问git的账号和密码 3.3 执行start.sh脚本 四. 浏览器访问jenkins执行任务...

Linux-Centos7安装Docker

文章目录 一、前言二、Docker安装1、Docker及系统版本2、Docker的自动化安装3、Docker手动安装3.1、卸载Docker&#xff08;可选&#xff09;3.2、设置源仓库3.3、Docker安装3.4、Docker启动3.5、验证是否安装成功3.5.1、拉取镜像3.5.2、查看镜像3.5.3、运行镜像 3.6、删除Dock…...

前端Vue入门-day06-路由进阶

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 路由的封装抽离 声明式导航 导航链接 两个类名 自定义高亮类名 跳转传参 1. 查询参数传参 2. 动态…...

数据库服务器是什么意思?数据库服务器有哪些?

数据库服务器是什么意思?现在市场上有很多的服务器的类型&#xff0c;比如数据库服务器&#xff0c;但是很多人对数据库服务器是什么意思?数据库服务器有哪些并不是很熟悉&#xff0c;那么&#xff0c;聚名企服为您详解一下。 一&#xff1a;数据库服务器是什么意思 数据库服…...

配电网智能软开关(sop)规划模型matlab

目录 1 主要内容 2 部分程序 3 程序结果 1 主要内容 该程序参考文献《基于改进灵敏度分析的有源配电网智能软开关优化配置》&#xff0c;采用二阶锥算法&#xff0c;以改进的IEEE33节点配电系统模型作为分析对象&#xff0c;以联络开关位置作为sop安装备选位置&#xff0c;以…...

Qt 常用函数

设置编码 #if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) #if _MSC_VERQTextCodec *codec QTextCodec::codecForName("gbk"); #elseQTextCodec *codec QTextCodec::codecForName("utf-8"); #endifQTextCodec::setCodecForLocale(codec);QTextCodec::se…...

UMA 2 - Unity Multipurpose Avatar☀️六.Advanced Occlusion高级遮挡功能解决皮肤服饰穿模

文章目录 🟥 本节功能效果展示🟧 基础项目配置🟨 本节项目配置🟩 配置MeshHideAsset1️⃣ 创建MeshHideAsset2️⃣ 配置SlotDataAsset3️⃣ 配置遮挡信息🟦 将 MeshHideAsset 配置到 Recipe🟥 本节功能效果展示 未遮挡前的穿模问题: 遮挡后效果:...

深度解析自然语言处理之篇章分析

在本文中&#xff0c;我们深入探讨了篇章分析的概念及其在自然语言处理&#xff08;NLP&#xff09;领域中的研究主题&#xff0c;以及两种先进的话语分割方法&#xff1a;基于词汇句法树的统计模型和基于BiLSTM-CRF的神经网络模型。 关注TechLead&#xff0c;分享AI全维度知识…...

Python3.11教程3:模块和包(pip/conda)、文件系统(os/ shutil/json/pickle/openpyxl/xlrd)

文章目录 七、模块和包7.1 模块7.1.1 模块搜索路径7.1.2 PYTHONPATH和sys.path7.1.2 模块的导入和常见错误7.1.3 模块的缓存机制7.1.4 __name__ 和 __main__ 函数 7.2 标准库7.3 包7.3.1 创建包7.3.2 导入包7.3.3 pip包管理器7.3.4 conda 7.4 如何组织和管理大型项目中的模块与…...

shell 脚本工具(三剑客)

第一个&#xff1a;awk awk 是一种强大的文本处理工具和编程语言&#xff0c;最初由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在20世纪70年代早期创建。awk 的名称来自于这三位创造者的姓氏的首字母。它在 Unix 和类 Unix 操作系统中广泛使用&#xff0c;用于处理、…...

基于微信小程序的智能垃圾分类回收系统,附源码、教程

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址&#xff1a; 基于微信小程序的智能垃圾分类回收系统&#xff0c;可作为毕业设计 小…...

【C++进阶】:AVL树(平衡因子)

AVL树 一.概念二.插入1.搜索二叉树2.平衡因子 三.旋转1.更新平衡因子2.旋转1.左单旋2.右单旋3.先右旋再左旋4.先左旋再右旋 四.完整代码 一.概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元…...

Python教程33:关于在使用zipfile模块,出现中文乱码的解决办法

zipfile是Python标准库中的一个模块&#xff0c;zipfile里有两个class, 分别是ZipFile和ZipInfo&#xff0c;用来创建和读取zip文件&#xff0c;而ZipInfo是存储的zip文件的每个文件的信息的。ZIP文件是一种常见的存档文件格式&#xff0c;它可以将多个文件和目录压缩为一个文件…...

【疑难杂症】使用xshell连接云服务器连接不上

目录 【1】使用xshell连接云服务器连接不上 【1.1】解决方法一 【1.2】解决方法二 【1】使用xshell连接云服务器连接不上 Centos7使用xshell连接提示"ssh服务器拒绝了密码 请再试一次"。 问题如图所示&#xff0c;新安装了一台Centos7服务器&#xff0c;使用ssh连…...

Qt MinGW / MSVC

MinGW/MSVC的关系 MinGW / MSVC.dll / .lib / .a 的关系 MinGW / MSVC Qt 中有两种方式编译&#xff1a;一种是MinGW &#xff0c;另一种MSVC&#xff0c;是两种不同的编译器。 MinGW(Minimalist GNUfor Windows)&#xff0c;它是一个可自由使用和自由发布的Windows特定头文件…...

【数学建模】数据预处理

为什么需要数据预处理 数学建模是将实际问题转化为数学模型来解决的过程&#xff0c;而数据预处理是数学建模中非常重要的一步。以下是为什么要进行数据预处理的几个原因&#xff1a; 数据质量&#xff1a;原始数据往往存在噪声、异常值、缺失值等问题&#xff0c;这些问题会对…...

VMware 安装 黑群晖7.1.1-42962 DS918+

本例的用的文件 1、ARPL 1.0beat 引导文件 vmdk格式&#xff1a; https://download.csdn.net/download/mshxuyi/88309308 2、DS918_42962.pat&#xff1a;https://download.csdn.net/download/mshxuyi/88309383 一、引导文件 1、创建一个虚拟机 2、下一步&#xff0c;选稍后…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...