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

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

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

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

递归的斐波那契数列的算法的效率惊人的低 得到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;
}
三相电机控制中的端电压、相电压与线电压波形解析 本文深入解析了三相电机控制中端电压、相电压与线电压的核心概念与波形差异。通过对比方波控制、SPWM和SVPWM三种主流控制策略下的实测波形特征,揭示了不同控制逻辑对电压波形(如梯形波、正弦波、马鞍波)的影响。文章重点阐述了SVPWM控制如何通过生成马鞍波形端电压来提高直流母线电压利用率,并提供了实用的波形测量与调试指南,帮助工程师深入理解电机控制原理并进行有效调试。 阅读详情

相关推荐

从稳压管到LDO芯片:一张图看懂线性电源的‘内卷’进化史

本文追溯了从稳压管到LDO芯片的线性电源技术进化历程,详细解析了各阶段的技术突破与局限。重点探讨了现代LDO在超低功耗、高精度控制等方面的创新,并提供了实战选型的黄金法则,帮助工程师在电子设备小型化与低功耗化趋势中做出最优选择。

weixin_42525551的博客 206

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

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

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1116

斐波那契数列

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

IronWring_Fly的博客 6万+

SWMM建模与案例应用

4、排水系统控制规则通过控制功能,可以在模拟进行过程中,通过条件判断,对闸门、水泵、管道、孔口、堰进行控制,实现排水系统实时控制。5、SWMM与其他模型对比分析分析:STORM、MOUSE、Info Works、SUSTAIN、SWC。1、模型初始设置主要参数:雨量计、汇水区、节点、出水口、管渠、分流器、蓄水池等参数前缀的设置。2、气象数据设置温度、蒸发、风速、融雪、面积亏损、气候调整、雨量计。1、多软件数据交互:CAD、Arcgis、SWMM。(1)节点、管段、水泵、孔口、堰、雨水口和街道。

m0_74575633的博客 3421

双目立体成像(一)双目图片生成点云

利用左右目图片生成点云

qq_62964142的博客 4551

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

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

博客 3万+

Dify 第 13 篇 Dify 工作流 详解

工作流通过将复杂任务分解为节点降低复杂度,提升LLM应用的性能和稳定性。Dify工作流分为两类:Chatflow面向对话场景(如客服),支持多轮对话;Workflow面向批处理场景(如翻译),提供逻辑节点实现自动化。核心概念包括节点、变量(系统/会话/环境变量)及应用类型差异:Chatflow支持中间输出和对话历史,Workflow仅支持结束节点输出。系统变量以"sys"开头,用于全局数据传递,不同应用类型变量不同,如Chatflow的sys.query存储用户输入,Workflow的s

甘蓝的专栏 3248

斐波那契数

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

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5440

Python爬虫实战:逆向解析天猫商品详情API,精准捕获规格、SKU与促销活动

及浏览器开发者工具),绕过前端渲染的复杂性,直接逆向分析并调用其内部数据接口,从而高效、稳定地抓取商品的关键信息,包括商品规格、多维度SKU信息以及复杂的促销活动。print(f"SKU ID: {sku.sku_id}, 价格: ¥{sku.price}, 库存: {sku.stock}, 规格: {sku.props}")当你访问一个商品链接时,浏览器首先会加载一个几乎为空的HTML骨架,然后通过执行大量的JavaScript代码,向后台服务器发起多个异步请求,最终将获取到的数据填充到页面中。

2201_76125261的博客 1129

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

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

(持续更新中!)详解【计算机类&面试真题】军队文职考试 ——第二期(真题+解析)| 网络协议的三个核心要素;交互式系统中的非剥夺策略;中断和陷入的区别;可变分区管理中的硬件机制;数据库系统的优点

本篇博客将讨论军队文职面试(计算机类)的几个关键问题。我们将介绍网络协议的核心要素(帮助你理解网络通信的基本原理)、交互式系统中的非剥夺策略(解释为何这是一个优秀的策略以及其对用户体验、系统稳定性和可预测性的影响)、中断和陷入的区别(从引起原因、处理机制、权限级别和应用等方面进行阐述)、可变分区管理的硬件机制以及数据库系统与文件系统的优点比较。通过阅读本文,您将深入了解这些话题,为面试准备和实际应用提供有价值的知识。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1707

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

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

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

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

前端劝退师 1153

NTscan扫描工具

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

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

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

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

余额充值