递推算法

浅谈递推算法 递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法。并且,这种算法和递归很相近。 1. 递推算法 这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫逆推。无论顺推还是逆推,其关键是要找到递推式。这种处理... 阅读详情

相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值.
比如阶乘函数:f(n)=n*f(n-1)
在f(3)的运算过程中,递归的数据流动过程如下:
f(3){f(i)=f(i-1)*i}–>f(2)–>f(1)–>f(0){f(0)=1}–>f(1)–>f(2)–f(3){f(3)=6}
而递推如下:
f(0)–>f(1)–>f(2)–>f(3)
由此可见,递推的效率要高一些,在可能的情况下应尽量使用递推.但是递归作为比较基础的算法,它的作用不能忽视.所以,在把握这两种算法的时候应该特别注意。
递推又分为顺推和逆推:
顺推法
所谓顺推法是从已知条件出发,逐步推算出要解决的问题的方法叫顺推。
如斐波拉契数列,设它的函数为f(n),已知f(1)=1,f(2)=1;f(n)=f(n-2)+f(n-1)(n>=3,n∈N)。则我们通过顺推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3……直至我们要求的解。
逆推法
所谓逆推法从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为逆推。
1.顺推:斐波拉契数列
先用递归思想解如下:

import java.util.Scanner;

public class Stui {
    public static void main(String[] args) {
        int n,re;
        Scanner input =new Scanner(System.in);
        System.out.println("请输入n的值:");
        n=input.nextInt();
        re=method(n);
        System.out.println("第"+n+"个数为"+re);
    }

    private static int method(int n) {
        int x1,x2;
        if(n==1||n==2){
            return 1;
        }else{
            x1=method(n-1);
            x2=method(n-2);
            return (x1+x2);
        }
    }
}
请输入n的值:
12
第12个数为144

再用递推思想如下:

import java.util.Scanner;

public class Stui {
    public static void main(String[] args) {
        int n,re;
        Scanner input =new Scanner(System.in);
        System.out.println("请输入n的值:");
        n=input.nextInt();
        re=method(n);
        System.out.println("第"+n+"个数为"+re);
    }

    private static int method(int n) {
        int x1,x2,re=0;
        if(n==1||n==2){
            re=1;
        }else{
            x1=1;
            x2=1;
            for(int i=3;i<=n;i++){
                re=x1+x2;
                x1=x2;
                x2=re;
            }
        }
        return re;
    }
}
请输入n的值:
12
第12个数为144

从上面例子可以看出递归和递推的区别。递归需要函数不断的向边界值靠拢,而递推(顺推)直接从边界出发,直到求出函数值。

2.逆推:已知存钱时间和目前本息和,求本金(利率为已知0.3)

import java.util.Scanner;

public class Ntui {
    public static void main(String[] args) {
        int x;
        float y, re;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入存钱时间:");
        x = input.nextInt();
        System.out.println("请输入目前本息和:");
        y = input.nextFloat();
        re = method(x, y);
        System.out.println("本金为" + re);

    }

    private static float method(int x, float y) {
        float[] r = new float[x];

        r[x - 1] = y;
        for (int i = x - 2; i >= 0; i--) {

            r[i] = (float) (r[i + 1] / (1 + 0.3));

        }
        return r[0];
    }

}
请输入存钱时间:
2
请输入目前本息和:
130
本金为100.0
C++的算法:递推算法 阅读详情

相关推荐

C语言数据结构 广工 作业系统 04.串

4.10③ 编写对串求逆的递推算法。 4.12③ 编写一个实现串的置换操作Replace(&S,T,V)的算法。 4.13③ 编写算法,从串s中删除所有和串t相同的子串。 4.17③ 编写算法,实现串的基本操作Replace(&S,T,V)。 要求采用教科书4.2.1节中所定义的定长顺序存储表示, 但不允许调用串的基本操作。

串求逆的递推算法

串求逆的递推算法 StringType是串的一个抽象数据类型,它包含以下6种基本操作: void InitStr(StringType &s);   // 初始化s为空串。 void StrAssign(StringType &t, StringType s);   // 将s的值赋给t。s的实际参数是串变量。 int StrCompare(StringType s, StringTy

积极奋斗的蜗牛 6804

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 273

数据结构 第四章串

第四章 串 填空、选择、next函数 知识点 了解串的存储方法 顺序存储 ```c typedef struct{ char *ch; int length; }HString ``` 链式存储 ```c #define CHUNKSIZE 80 //可由用户定义的块大小 typedef struct Chunk{ char ch[CHUNKSIZE]; struct Chunk *next; }Chunk; typedef struct{ Chunk *h

llllliznc的博客 1245

国内优秀MES开源框架

一套springboot 开源框架 代码标准规范化。 界面展示 演示地址 http://wangziyangmes.pzzd.xyz 用户名admin 密码123 系统管理 工艺管理 计划管理 物料管理 *用户管理* *工艺路线管理* 工单下达...

q707231019的博客 2万+

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3761

c++求逆串的递归算法

c++求逆串的递归算法

TurboQ珞珈 920

专项1.CCS代码补全与快捷键优化全攻略

本文全面解析CCS开发环境的代码补全功能与快捷键优化技巧,包括内容辅助触发机制、快捷键自定义配置、编码效率提升方法等实用内容。通过详细步骤指导开发者优化CCS配置,实现高效的代码自动补全和个性化快捷键设置,显著提升嵌入式开发效率。

kotlin6android的博客 225

对串求逆的递归算法

#对串求逆的递归算法 题目 对字符串 “ABCDE” 进行逆向输出,输出为 “EDCBA”。 #include <iostream> #include <string> std::string ReverseString(std::string s) { std::string s1; if(s.length() == 1) { return s; } else { s1 = ReverseString(s.substr(1, s.length() - 1));

vv_017的博客 1651

树莓派c语言串口通讯程序

在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一

realank的专栏 1万+

【2026年华为暑期实习/秋招(AI)-8月5日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 本文包含20道选择题,涵盖深度学习、数值计算、概率统计、线性代数及机器学习等领域。重点考察了Softmax的数值稳定性实现(减去最大值)、视觉问答任务(图像+问题→答案)、分层强化学习的奖惩计算、欧氏距离与余弦相似度、反向传播梯度计算、SVD降维存储优化、贝叶斯概率推断、插值多项式等。此外,涉及逻辑回归评价指标(不含MSE)、端侧推理内存因素(中间激活)、集中趋势度量(均值)、Householder变换性质、早期停止正则化、梯度矩阵秩与优化、在线学习特性及大模型训练技巧(如学习率预热、梯度裁剪)等知

m0_73659489的博客 194

数据结构学习笔记——递归(分而治之)

什么是递归?    在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。若调用自身,称之为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。     如果一个递归过程或递归函数中递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。    以下是求n!(n为正整数)的递归函数。 int fun(int n) {      if (n

baijianjun123456的博客 2279

【安全启动】HSM安全启动系统学习指南

HSM安全启动系统学习指南摘要 本指南为工程师提供关于HSM安全启动的系统性学习路径,以英飞凌AURIX TC377芯片为核心案例,涵盖基础理论、芯片实现、开发实践和行业应用四个阶段。安全启动作为设备信任链的起点,在汽车电子和工业控制领域尤为重要。指南详细解析了TC377的HSM架构、UCB/PROCON配置、密钥管理等关键技术,并提供了从开发到认证的全流程指导。特别关注汽车行业合规要求(如ISO/SAE 21434、UN R155),帮助开发者构建安全可靠的启动系统,规避常见工程陷阱。通过四阶段渐进学习,

weixin_46481662的博客 517

递推算法1——顺推法之斐波那契数列

递推算法是一种比较简单的算法,即通过已知条件,利用特定关系得到中间结论,然后得到最后结果的算法。递推算法分为顺推和逆推两种,本章通过几个典型的例子来说明递推算法的应用。 顺推法 顺推法是指从已知条件出发,逐步推算出要解决问题的方法。例子,斐波那契数列、进制转换等问题都可以利用顺推法解决。 斐波那契数列(递推法) 如果1对兔子每月能生1对小兔子,而每对小兔子在它出生后第3个月,又能开始生一对小...

凌空的桨 3787

LeRobot 机器人学习(Robot Learning)教程(二)经典机器人学

本文探讨了机器人学中基于学习的方法与传统动力学方法的对比与发展趋势。文章指出,传统方法依赖精确的动力学模型和大量人工调参,面临跨任务泛化能力弱、工程复杂度高、物理建模局限性等问题。随着机器学习技术的进步和机器人数据集的丰富,基于学习的方法展现出三大优势:(1)能够实现跨任务与实体的泛化;(2)降低对人类专业知识的依赖;(3)利用历史数据优化性能。文中以平面机械臂为例,分析了传统逆运动学方法的计算复杂性和环境适应性挑战,并指出基于学习的方案在处理高维感知输入、复杂接触动力学等方面具有明显优势。文章认为,结合物

2506_90492529的博客 1066

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

递推算法C++

递推算法通过已知条件和递推关系,逐步推导出问题的解。在C++中实现递推算法,关键是正确定义状态、建立递推关系、设置初始条件。通过本文的四个例题,我们可以看到递推算法在解决序列问题和网格路径问题中的应用。对于初学者来说,理解递推思想比掌握高级数据结构更重要。通过大量练习,可以培养将实际问题转化为递推模型的能力,这是算法学习的重要基础。递推算法不仅是动态规划的基础,也是许多复杂算法的核心思想。在实际编程中,要注意边界条件的处理、数组下标的范围检查,以及递推关系的正确性验证。

ZZZZYYYPPP的博客 1620

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

递推算法——例题详解

递推算法的本质 得到前后过程间的数字关系,将复杂问题分解为几个小问题 例一 数塔问题(倒推法) 图片百度的 问题 从顶至底找出一个路径,使其和最大 分析 从上往下推似乎有点麻烦 那么我们想想能不能从下而上(显然这样更好) 我们可以让n-1层的数加上他相邻的n的数中的最大值 如此反复 到最顶上必然是最大。 代码实现 #include<iostream> #include&lt...

weixin_45944993的博客 1346

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

基本算法之递推算法

基本算法之递推算法 一.递推算法基本思想 递推算法是一种理性思维模式的代表,其根据已有的数据和关系,逐步推导而得到结果。其大致步骤如下: 1.根据已知结果和关系,求解中间结果。 2.判定是否达到要求,如果没有达到,则继续根据已知结果和关系求解中间结果;如果满足要求,则表示找到一个正确的答案。 **小技巧:**递推算法往往需要用户知道答案和问题之间的关系。在许多数学问题中,都有着明确的计算公式可以遵...

lv_hulk的博客 1560
上一篇: 递归算法
下一篇: 分治算法
詹詹自喜KING
博客等级 码龄11年 40粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值