【递归算法】 斐波那契数列的备忘录优化

算法笔记----递归算法 适合小白学习的递归算法! 阅读详情

递归算法之斐波那契数列的优化

闲来无事尝试了一下斐波那契的递归算法

递归的斐波那契数列的算法的效率惊人的低 得到43个数据需要8秒钟

未优化

而优化过带备忘录的斐波那契数列,只需要0.2秒就可以打出64个数据

优化后

2秒可打出1000个

优化后的1000个数据

说明了线性时间复杂度和n^2的指数级别的时间复杂度的相差之大

另附代码:

Original

#include <iostream>

using namespace std;

int fib_arr(int i);

int fib_arr(int i)
{
    if(i == 1 || i == 2){
        return 1;
    }

    if(i > 2){
        return fib_arr(i-1) + fib_arr(i-2);
    }
}


int main()
{
    for(int i = 0; i < 43; ++i){
        cout << fib_arr(i) << '\t';
    }
    return 0;
}

Result

#include <iostream>

using namespace std;

const int SIZE = 64;

long long int *sav = new long long int[SIZE];

long long int fib_arr(int i);

long long int fib_arr(int i)
{
    if(i == 1 || i == 2){
        sav[i] = 1;
        return sav[i];
    }

    if(i > 2){
        sav[i] = sav[i-1] + sav[i-2];
        return sav[i];
    }
}


int main()
{
    for(int i = 1; i < SIZE; ++i){
        cout << fib_arr(i) << '\t';
    }
    return 0;
}
苏州大学自动化考研842自动控制原理:手把手教你用胡寿松《自控》高效备考(附复试电工/电子/微机原理攻略) 本文详细解析苏州大学自动化考研842自动控制原理备考策略,以胡寿松《自动控制原理》为核心教材,提供三阶段高效学习路径和实战技巧。重点涵盖频域分析、根轨迹绘制等高频考点,并针对机电、光电、轨道三个学院的复试科目(电工电子技术、电子技术基础、微机原理与接口技术)给出差异化备考方案,助力考生全面提升笔试和面试表现。 阅读详情

相关推荐

MySQL 8.0数据库崩了别慌!手把手教你仅凭一个.ibd文件找回数据(附Go工具包)

本文详细介绍了在MySQL 8.0数据库崩溃后,如何仅凭.ibd文件恢复数据的完整流程。通过使用Go语言工具包和ALTER TABLE技巧,即使没有备份也能实现数据重生。文章包含从环境准备到数据验证的全方位指导,帮助DBA和开发者应对紧急数据恢复场景。

weixin_29235923的博客 420

求斐波那契数列的三种方法

什么是斐波那契数列,1,1,2,3,5,8,13...这样一个数列就是斐波那契数列,求第n项的值。 一、经典求法 观察数列可得,除了第一项和第二项,所有的数列的值都是前一项和前一项的前一项的加和,转换成函数也就是f(n) = f(n-1) + f(n-2) public static int f1(int n) { if(n &lt; 1) { return 0; ...

小猛同学的博客 14万+

封装CTP API为Java SDK

本文介绍了在Windows环境下使用Java调用CTP API的编译实现过程。首先需要准备CTP API SDK、JDK、SWIG和Visual Studio等工具,配置好开发环境。然后通过搭建目录结构、编写SWIG接口文件ctp.i,实现C++到Java的代码转换。文中详细说明了文件目录组织方式,并提供了处理中文乱码的代码示例。通过这一系列步骤,最终将CTP的C++接口转换为Java可调用的形式,为Java项目获取期货实时报价数据提供支持。

weixin_43952815的博客 1222

斐波那契数列

  斐波那契数列来源于兔子繁殖问题,所以也叫兔子序列。   最开始我一直不能理解兔子问题怎么和斐波那契数列联系在一起的,然后画了这个图之后,就明白了。   第一年有一对小兔子,一年后成年。成年的兔子又可以生出一对小兔子,如此循环往复,每年的兔子数就构成了一个斐波那契数列。   斐波那契数列有很多马甲: 爬楼梯问题,一次可以爬一级,也可以爬两级; 用1个2 * 1个小矩形覆盖8个2*1的...

IronWring_Fly的博客 6万+

功率半导体器件选型指南:从GTO、GTR到MOSFET、IGBT的原理与应用

功率半导体器件是电力电子系统的核心,如同电路中的智能开关,负责电能的转换与控制。其工作原理基于半导体材料的导电特性,通过控制信号精确管理电路的通断。这类器件的技术价值在于提升能效、减小体积并增强系统可靠性,广泛应用于变频器、逆变器、开关电源及新能源领域。理解不同器件如MOSFET的雪崩能量与IGBT的损耗计算,是进行高效、可靠电路设计的基础。本文聚焦于GTO、GTR、MOSFET和IGBT这四类经典全控型器件的特性对比与选型策略,帮助工程师在具体项目中做出经济可靠的选择。

cumo7370的博客 447

Unreal Engine Profiler:动画系统性能分析教程_2024-07-23_03-05-38.Tex

Unreal Engine Profiler 是一个内置的性能分析工具,它可以帮助开发者识别和解决游戏中的性能瓶颈。Profiler 提供了详细的性能数据,包括 CPU 使用率、GPU 负载、内存使用情况等,特别针对动画系统,可以查看动画蓝图的执行时间、骨骼动画的计算成本、以及动画混合和重定向的效率。通过这些数据,开发者可以定位到具体的问题,比如哪些动画状态消耗了过多的 CPU 时间,或者哪些动画资源导致了内存泄漏。

825

斐波那契数列(Fibonacci Sequence)多种解法与矩阵快速幂详解

斐波那契数的多种计算方法

博客 3万+

60、磁悬浮主动隔振系统的LQR控制研究

本研究针对磁悬浮主动隔振系统,提出了一种结合ANN建模、LQR控制与MPGA优化的综合控制方案。通过建立系统的动力学与状态空间模型,利用混合训练算法的ANN精确描述MSVI的非线性和滞后特性,并设计基于最小力传递率的LQR控制器。为优化LQR的Q和R矩阵,引入多群体遗传算法(MPGA),有效克服传统GA的早熟收敛问题,提升搜索效率与控制性能。仿真结果表明,在单频、扫频、随机及冲击激励下,该方法显著降低传递力幅值,隔振效果远优于被动系统。研究验证了所提方法的有效性,为磁悬浮隔振技术的实际应用奠定了基础,并展望

linux6sysadmin的博客 127

斐波那契数

斐波那契数1 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 给定 N,计算 F(N)。 示例 1: 输入:2 输出:1 解释:F(2) = F(1) + F(0) = 1 + 0 = 1. 示例 2: 输入:3 输出:2 解释:F(3) = F(2) + F(1) = 1 + 1 = 2. 示

Nnnn的博客 1049

23、微波电路中的过孔、过孔围栏与接地焊盘建模分析

本文详细分析了微波电路设计中过孔、过孔围栏及接地焊盘的建模与优化方法。探讨了过孔模型的发展及其电感与电容特性,通过场求解器和集总元件模型提高建模精度。此外,分析了过孔隔离围栏在改善信号隔离中的作用,并通过2.5D和3D电磁仿真验证其效果。最后,研究了接地焊盘中过孔布局对电路稳定性的影响,提出了优化过孔位置以消除谐振和杂散振荡的方法。文章为微波电路设计提供了重要的理论支持和实践指导。

convnet3designer的博客 164

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1259

带备忘录的递归—->斐波那契数列

解决方案:使用带备忘录(数组存下计算过的结果)的递归—->计算过的斐波那契数列的那一位就不会再重复计算—->相当于每位只做一次计算操作—->时间复杂度O(n)约为n。原因:上述递归构成一颗搜索数—->结点数约为2^ n个—-> 时间复杂度O(n)约为2^n。//如果这一位已经计算过(demo[n]存在),那么就直接返回,不再重复计算。输入n,求F(n),n <= 100000,结果对1e9+7取模。n > 3时,F(n) = F(n - 1) + F(n- 2)已知F(1)=F(2)=1;

Nocomplaints的博客 496

MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)

1.结构张量的作用:       能够区分图像中的平坦区域,边缘,角点; 2.图像中的结构张量的定义    1)是一个矩阵;    2)与图像的水平,垂直梯度有关,定义如下: 在MATLAB中,可以用如下语句求解:[Ix,Iy]=gradient(Image); 3)求出结构张量矩阵的行列式,和迹(矩阵对角线之和)   行列式:K=det(E);   迹:  

wenyusuran的专栏 5242

C++斐波那契数列(带备忘录的递归)

C++斐波那契数列(带备忘录的递归) 斐波那契数列的数学形式就是递归的,写成代码就是这样: int fib(int N) { if (N == 1 || N == 2) return 1; return fib(N - 1) + fib(N - 2); } 这个不用多说了,学校老师讲递归的时候似乎都是拿这个举例。我们也知道这样写代码虽然简洁易懂,但是十分低效,低效在哪里?假设 n = 20,请画出递归树: PS:但凡遇到需要递归的问题,最好都画出递归树,这对你分析算法的复杂度,寻找算法低

qq_32019341的博客 1872

怀旧版电脑GBC模拟器

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

从最简单的斐波那契数列来学习动态规划。(JavaScript版本)

前言斐波那契数列是一个很经典的问题,虽然它很简单,但是在优化求解它的时候可以延伸出很多实用的优化算法。它的概念很简单,来看一下 LeetCode 真题里对他的定义:斐波那契数,通常用 ...

前端劝退师 1153

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

斐波那契数列 : 递归,备忘录递归,动态规划实现与对比

参考: 细谈递归,备忘录递归,动态规划,三种算法思想和运行原理 import java.util.HashMap; /** * 1、1、2、3、5、8、13、21、34、…… * 斐波那契数列以如下被以递推的方法定义: * F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*) * <p> * 大家都知道,数值稍大的递归运行...

火星男孩的分享空间 797

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

c语言斐波那契数列_从最简单的斐波那契数列来学习动态规划。(JavaScript版本)...

前言斐波那契数列是一个很经典的问题,虽然它很简单,但是在优化求解它的时候可以延伸出很多实用的优化算法。它的概念很简单,来看一下 LeetCode 真题里对他的定义:斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1)= 1F(N) = F(N - 1) + F(N ...

weixin_39876595的博客 367

斐波那契数列及优化

由来 1202 年,生于意大利比萨的数学家 莱昂纳多·斐波那契 完成了他的传世名著《算盘书》,书中对一个有趣的 “兔子繁殖问题” 进行了研究,斐波那契数列便由此而来。 兔子繁殖问题实际上是 斐波那契 提出的一个数学模型: 假定一对大兔子一年生一对小兔 一对小兔子一年后长大成为一对大兔子 且所有的兔子都长生不死 那么这些兔子是按照什么样的规律繁殖的呢? 第一年, 只有一对小兔子, f(1) =...

花明的博客 1896

由斐波那契数列谈到递归、备忘录、动态规划、生成器

斐波那契数列 F(1)=1 F(2)=1 F(n)=F(n - 1)+F(n - 2) 版本一 暴力递归 可以看做是一个树 自顶向下 n的值就等于树的高度 时间复杂度O(n^2) def fib1(n): if n == 1 or n == 2: return 1 return fib1(n - 1) + fib1(n - 2) 版本二 暴力递归+备忘录 一般使用一个数组充当这个「备忘录」,当然也可以使用哈希表(字典),思想都是一样的。 备忘录就是为了避

SCUhzs 475

动态规划算法斐波c语言,前端算法必知必会之动态规划-爬楼梯(斐波那契数列)...

前言斐波那契数列是一个很经典的问题,虽然它很简单,但是在优化求解它的时候可以延伸出很多实用的优化算法。它的概念很简单,来看一下 LeetCode 真题里对他的定义:斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1)= 1F(N) = F(N - 1) + F(N - 2),...

weixin_42381087的博客 280

花式计算斐波那契(fibonacci)数列

花式计算斐波那契fibonacci数列关于1. 循环2. 递归3. 带备忘录的递归4. 使用矩阵乘法统一测试下 关于 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 在数学上,斐波那契数列以如下被以递推的方法定义: F(0)=1,F(1)=1,F(n)=F(n−1)+F(n−2)(n≥2,n∈N∗) F(

m0_52313753的博客 922

记忆 - 斐波那契数列

var memoizer = function(memo, fundamental) { var shell = function(n) { var result = memo[n]; if (typeof result !== 'number') { re...

anzheng6118的博客 118

动态规划之斐波那契数列

如果一个递归算法需要对相同的子问题进行多次重复计算,那么我们通常可以采用动态规划对其进行优化。 动态规划的具体实现可以分为两类:一类是自顶向下的备忘录方法,这种方法只需要对原始的递归算法进行少量的改动,增加一个子问题解的记录,每当需要用到一个子问题的解时,首先查看这个记录,如果记录中存在需要的解,则可直接得到,如果不存在,则递归求解,并将结果记录下来。另一类是自底向上的迭代方法,这种方法从最基本

Warren_Hoo的专栏 1941

每天一道算法题——斐波那契数列

啊送分题(想起有次做某厂测试的笔试,大家都是这种题,而我是一个字符串重复匹配???) 这题递归做很简单,几行代码完事。 lambda的性能不如直接写,超时了。 UnaryOperator<Integer> ff; public int Fibonacci(int n){ ff = i->i<=1?i:(ff.apply(i-1)+ff.apply(i-2)); return ff.apply(n); } 但是它的效率并不高,可以画下.

qq_38732834的博客 406
上一篇: 【2016/3】多线程编程 线程同步技术 线程锁 用户校验
下一篇: 【2016/9】 简单 Docker 入门
KhalilCigar
博客等级 码龄12年 32粉丝 28原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值