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

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

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

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

递归的斐波那契数列的算法的效率惊人的低 得到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;
}
abaqus 6.13安装(ubuntu 16.04LTS) 1。从iso将文件拷贝出来 2。chmod 777 -R ./* 给文件权限 3。sudo /home/xx/A/setup 4。安装licenseserver 5。拷贝lic,log文件 6。打开license sudo ./lmgrd -c path 7. 27011@xx or 27011@localhost ... 阅读详情

相关推荐

ESP32搭配LVGL显示图片的两种方法详解:内部存储 vs 外部文件

本文详细介绍了ESP32搭配LVGL显示图片的两种方法:内部存储与外部文件。内部存储方案适合快速响应的小图片,而外部文件方案则适用于需要灵活更新和大容量图片的场景。通过对比分析,帮助开发者根据项目需求选择最优方案,提升嵌入式系统的UI性能。

weixin_30399821的博客 519

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

什么是斐波那契数列,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万+

Flowable第一篇、快速上手(Flowable安装、配置、集成)

Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用

Du_XiaoNan的博客 1万+

斐波那契数列

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

IronWring_Fly的博客 6万+

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1575

从底层结构开始学习FPGA(8)----Block RAM(BRAM,块RAM)

BRAM作为FPGA底层的存储资源,作用很大,比如可以RAM/ROM/FIFO。

孤独的单刀 2万+

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

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

博客 3万+

使用 Simulink + Simscape Electrical 对基于VSG控制的背靠背变流器整流侧进行建模与仿真

本文介绍了基于Simulink的直驱风电系统背靠背变流器整流侧虚拟同步发电机(VSG)建模方法。首先阐述了直驱风电系统结构和VSG控制的作用,然后详细指导了模型搭建过程:从创建项目、添加PMSG和变流器模块,到搭建主电路拓扑和实现VSG控制逻辑。重点说明了VSG控制器如何模拟传统同步发电机的特性,并提供了仿真设置和结果分析方法。该模型可用于研究风电系统在不同工况下的响应特性,为新能源发电系统设计提供重要参考。

amy_mhd的博客 180

斐波那契数

斐波那契数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

S7-1200中OB100和OB20中断使用方法及示例程序说明(图文)

S7-1200中OB100和OB20中断使用方法及示例程序说明(图文)

Robot_PLC_HMI_Automation 8585

ESM2蛋白预训练模型 蛋白质、氨基酸向量表示

参考: https://github.com/facebookresearch/esm https://huggingface.co/facebook/esm2_t33_650M_UR50D https://esmatlas.com/resources?action=fold tokenizer_对输入蛋白会头尾添加cls、eos特殊字符,占两个字符长度 参考:https://github.com/facebookresearch/esm 直接clone下来代码

weixin_42357472的博客 1万+

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

解决方案:使用带备忘录(数组存下计算过的结果)的递归—->计算过的斐波那契数列的那一位就不会再重复计算—->相当于每位只做一次计算操作—->时间复杂度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

YOLO系列专栏(六):YOLO26热力图可视化 | 解析模型推理逻辑,定位检测关键区域

YOLO26作为新一代目标检测模型,其核心优势是高效的特征提取和精准的目标定位,但模型内部的推理过程的“黑盒”特性,给我们的优化带来了很大困扰:❌ 检测精度低:不知道是模型没学到关键特征,还是特征提取不充分;❌ 出现误检/漏检:无法定位问题根源——是锚框不合适?还是特征图未捕捉到目标?❌ 模型优化盲目:调参、修改网络结构全靠“猜”,缺乏针对性;❌ 难以解释模型行为:实际项目中,需要说明模型“为什么检测到这个目标”,尤其是医疗、工业等对可解释性要求高的场景。而热力图可视化。

qq_36130719的博客 732

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

前端劝退师 1153

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

参考: 细谈递归,备忘录递归,动态规划,三种算法思想和运行原理 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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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、付费专栏及课程。

余额充值