斐波那契数列

最优化-斐波那契数列(fibonacci)优化方法 算法原理及代码实现 本文介绍了Fibonacci数列优化的原理,并详细的用pytho实现其算法。 阅读详情

当n=0时,f(n) = 0     

当n=1时,f(n) = 1

当n>1时,f(n) = f(n-1) + f(n-2)


递归算法:

int fun(int n)
{
	if(n <= 0)
		return 0;
	if(n == 1)
		return 1;

	return fun(n-1)+fun(n-2);
}

备忘录方法:

#include <iostream>
using namespace std;

const int N = 100;
int f[N];

int fun(int n)
{
	if(f[n]>=0)
		return f[n];

	if(n == 0)
	{
		f[0] = 0;
		cout<<"0"<<endl;
		return f[0];
	}

	if(n == 1)
	{
		f[1] = 1;
		cout<<"1"<<endl;
		return f[1];
	}

	cout<<n<<endl;
	f[n] = fun(n-1) + fun(n-2);
	return f[n];
}

int main()
{
	for (int i=0; i<N; i++)
		f[i] = -1;

	cout<<fun(4);
	return 0;
}

由于计算的时候只需要前两个数即可,所以代码还可以继续优化。但是对于上述的备忘录方法貌似不能继续进行空间优化了(不知道对否,如果理解的不对请不吝赐教~)。

但是对于下面的方法(就称为遍历方法吧),还是可以继续优化的。

#include <iostream>
using namespace std;

const int N = 100;
int f[N];

int main()
{
	
	int n;
	cin>>n;

	for (int i=0; i<=n; i++)
	{
		if(i==0)
			f[i] = 0;
		else if(i==1)
			f[i] = 1;
		else
			f[i] = f[i-1] + f[i-2];
	}

	cout<<f[n];

	return 0;
}
由于计算的时候只用了前两个数,所以没有必要使用数组。

#include <iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;

	int temp1, temp2, temp;
	for (int i=0; i<=n; i++)
	{
		if(i==0)
			temp1 = 0;
		else if(i==1)
			temp2 = 1;
		else
		{
			temp = temp1 + temp2;
			temp1 = temp2;
			temp2 = temp;
			
		}
	}

	cout<<temp;

	return 0;
}

总结:从代码中可以看出来,遍历方法实际上是一种自底向上的方法,而备忘录方法是一种自顶向下的方法,也许正由于这个原因造成了备忘录方法无法进行空间优化。(待证)

关于斐波那契数列 关于斐波那契数列   友情提醒:由于本人很蒻,所以文章中的一些推导会有一些不严谨,大家看着就当图个乐qwq。 一、斐波那契数列的生成函数   在说这个玩意儿之前,我们先讲一下什么是生成函数。 生成函数即母函数,是组合数学中尤其是计数方面的一个重要理论和工具。最早提出母函数的人是法国数学家LaplaceP.S.在其1812年出版的《概率的分析理论》中明确提出。 生成函数有普通型生成函数和指数型生成函数两种,其中普通型用的比较多。 生成函数的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情 阅读详情

相关推荐

斐波那契

斐波那契堆

递归函数[f(n)=f(n-1)+f(n-2)]

#include<stdio.h> long fun(int n) { int f; if(n==1||n==2) f=1; else f=fun(n-1)+fun(n-2); return f; } int main() { int n,f; scanf("%d",&n); f=fun(n); printf("%d\n",f); return 0; } 课本p173

m0_63705816的博客 1627

BurpSuit在不同浏览器中配置代理

文章通过分享各大浏览器如何设置代理的知识,帮助初学者快速掌握代理配置相关技能。

北冥同学的成长记录笔记 1万+

origin

origin创建模板步骤

m0_68720164的博客 685

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1310

逆向实战:基于内存态匿名段分析的 DexProtector 检测绕过策略

本文深入探讨了针对DexProtector加固方案的Frida检测绕过策略。通过分析运行时动态加载到匿名内存段的核心检测逻辑,提出了一套基于内存态分析、定位并转储匿名可执行段,进而通过精准Hook与“等式化替换”等技术实现稳定绕过的实战方法。该方法不仅适用于DexProtector,也对采用类似内存隐藏技术的加固方案具有参考价值。

ik678901的博客 516

动态规划-从暴力搜所到备忘录再到递推

动态规划-从暴力搜所到备忘录再到递推题目描述暴力递归:改进1 备忘录方法(也叫记忆搜索法)改进2 递推式的方法(也叫位置依赖法)总结 题目描述 假设有排成一行的N个位置,记为1-N,N一定大于等于2 开始时机器人在其中的current位置上(current一定时1-N中的一个) 如果机器人来到1位置,那么下一步只能来到2位置 如果机器人来到N位置,那么下一步只能来到N-1位置 如果机器人来到中间位置,那么下一步可以往左走一步,也可以往右走一步 规定机器人必须走step步,最终能来到aim位置(aim也是1

褪色的博客 544

SAP-MM-PR分配货源并转PO

SAP-MM-PR分配货源并转PO

yanzibing99的博客 5475

斐波那契数列递归算法和非递归算法以及其时间复杂度分析

1、在学习数据结构这门课的过程中,发现斐波那契数列的递归算法以及非递归算法,以及其时间复杂度分析是一个小难点。所以特别总结一下。 斐波那契数列的表达式: Fibonacci数列简介: F(1)=1 F(2)=1 F(n)=F(n-1)+F(n-2)    (n>2) 2、(1)斐波那契数列的递归算法思想描述:利用递归思想,每次计算当前的值时候,就要引用之前的两个值,一步一步的递归,

阅读修身 4万+

解决西门子Step 7 basic 找不到许可证问题

你在使用博图软件是否遇到过Step 7 basic 找不到许可证的问题呢!不言怕,今天我就来告诉你该如何处理吧!看步骤: 1.删除原授权的License: 打开Automation License Manager应用,然后我们可以发现仅有的License Key前面有一个时钟,说明它已经过期不可用,我们就要去寻求新的Key. 打开“我的电脑”,选择C盘,点击上方查看 点击选项–>查看 然...

让技术没有门槛 14万+

从零到一:基于Esp32与LVGL的ST7789屏幕驱动全流程实战

本文详细介绍了基于Esp32与LVGL的ST7789屏幕驱动全流程实战,包括环境准备、驱动文件改造、硬件接口配置、LVGL集成与优化等关键步骤。通过VSCode+ESP-IDF开发环境,读者可以快速掌握SPI模式下的屏幕驱动开发,解决常见问题如颜色错乱、画面撕裂等,并实现LVGL的高效集成与性能优化。

weixin_33725722的博客 711

C++——斐波那契数列

C++——斐波那契数列 1. 斐波那契数列 斐波那契数列的特征是为0开始,接下来两位数为1或者直接前两位为1开始,从第三位开始,后一位是前面两位之和(也可以看做增加的数是一个首项为2,公差为1的等差数列)。 斐波那契数列也又称黄金分割数列,以兔子繁殖作为引入,也称为兔子数列。(高三数学被这东西折磨够了,现在看见是相见恨晚!!) 斐波那契数列的通项公式为:f(n)=f(n-1)+f(n-2) 2.C++实现 首先我们需要写出一个斐波那契数列的类 #include<iostream> using n

Krisit的博客 2万+

Raspberry Pi 4B 蓝牙串口(SPP)配置与使用

Linux、Android、Windows 等操作系统带有在引导期间启动的蓝牙守护进程/蓝牙服务。 对于与监视器连接并使用 GUI(如 GTK 等)运行的设备,只需多次单击即可轻松启用并连接到附近的设备。 但是在无头设备的情况下,我们必须依赖于需要在命令行上运行的不同命令。 这篇博客我们将讨论如何在无头树莓派上通过蓝牙设备连接附近。

视觉与物联智能 2745

matlab斐波那契数列画图,斐波拉契数列 斐波那契数列 matlab程序

斐波那契数列数列从第3项开始,每一项都等于前两项之和。 例子:数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368 应用: 生活斐波那契 斐波那契数列中的斐波脾气有点大,表面温和到别人误以为很好欺负,其实内心脾气大的可怕。性格矛盾分裂,自尊超...

weixin_35693055的博客 2983

【SCADA】KingSCADA将数据插入SQLServer的方法

1、创建数据库及数据表格;2、配置ODBC数据源。3、通过KingSCADA与数据库建立连接,将数据写入数据库对应表格。

做有价值的事,积累有价值的笔记! 4963

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

斐波那契数列_兔子数列——斐波那契数列

相信人们都对斐波那契数列有或多或少的了解,如果没有,那你一定听过黄金分割比或是见过下面这种图片:斐波那契生活在十三世纪的意大利,原名列奥纳多·皮萨诺(Leonardo Pisano),他出生在意大利那个后来因为伽里略做过自由落体实验而著名的斜塔所在的城市里。值得一提的是,除了常为人所道的斐波那契数列,他还有一项更伟大的数学成就——将阿拉伯数字和乘数的位值表示法系统引入了欧洲。所以,我们也许可以说他...

weixin_39547158的博客 1350

NTscan扫描工具

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

上一篇: 动态规划&备忘录方法&递归方法
下一篇: C语言的外部变量
traceorigin
博客等级 码龄15年 38粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值