斐波那契(Fibonacci)数列的求法

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

      斐波那契数列是这样的一组数列:0,1,1,2,3,5,8,13,21,34,55,89,144,...。通项公式为F(n) = F(n-1) + F(n-2)。原始求法:

int Fibonacci(int N)
{
	if (N <= 0) 
		return 0;
	if (N == 1)
		return 1;
	if (N > 1) return Fibonacci(N-1)+Fibonacci(N-2);
}
利用分治策略:

(F(n),F(n-1)) = (F(n-1),F(n-2))*A

A = {{1,1};{1,0}};

那么
(F(n),F(n-1)) = (F(n-1),F(n-2))*A = (F(n-2),F(n-3))*(A^2) = ... = (F(1),F(0))*(A^(n-1))。

一种实现:

#include <stdio.h>
#include <string.h>

int BASE[2][2] = {{1,1},{1,0}};
int I[2][2] = {{1,0},{0,1}};

void Show(int A[][2],int m,int n)
{
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
			printf("%-3d",A[i][j]);
		printf("\n");
	}
}
void Multiply(int A[][2],int B[][2],int C[][2])
{
	for(int i=0;i<2;i++)
		for(int j=0;j<2;j++)
		{
			C[i][j] = 0;
			for(int k=0;k<2;k++)
				C[i][j] += A[i][k] * B[k][j];  
		}
} 
 

void MatrixPow(int A[][2],int B[][2],int n)
{
	int C[2][2] = {0};
	memcpy(B,I,2*2*sizeof(int));
	memcpy(A,BASE,2*2*sizeof(int));
	for(;n;n >>= 1)
	{
		if(n&1)
		{
			Multiply(A,B,C);
			memcpy(B,C,2*2*sizeof(int));
		}
		Multiply(A,A,C);
		memcpy(A,C,2*2*sizeof(int));
	}
}


int Fibonacci(int N)
{
	if (N <= 0) 
		return 0;
	if (N == 1)
		return 1;
	if (N > 1) return Fibonacci(N-1)+Fibonacci(N-2);
}
int Fibonacci2(int N)
{
	int F1 = 1;
	int F0 = 0;
	int M1[2][2] = {0};
	int M2[2][2] = {0};
	MatrixPow(M1,M2,N-1);
	Show(M2,2,2);
	return F1*M2[0][0] + F0*M2[1][0]; 
}
int main()
{
	Show(BASE,2,2);
	Show(I,2,2);
	
	printf("Fib 9 : %d \n",Fibonacci(9));
	printf("Fib 8 : %d \n",Fibonacci(8));
	
	printf("Fib 9 : %d \n",Fibonacci2(9));
	getchar();
}
输出:

1  1  
1  0  
1  0  
0  1  
Fib 9 : 34 
Fib 8 : 21 
34 21 
21 13 
Fib 9 : 34 
REF:

1,编程之美


斐波那契数列(Fibonacci sequence)【思路及实现】 定义 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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... 阅读详情

相关推荐

斐波那契数(Fibonacci)递归求法与迭代求法及它们各自的优缺点

文章目录什么是斐波那契数列?递归方法求第n个斐波那契数迭代方法求第n个斐波那契数递归法与迭代法各自的优缺点 什么是斐波那契数列? 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)

2021dragon的博客 7654

斐波那契数列

斐波那契数列

Beatr1ce的博客 8万+

斐波那契数列(关于特征值的例子)

斐波那契数列(关于特征值的例子) 下图源自:百度百科 下图源自:百度百科 下图源自:我在向日葵里找到了黄金比例!斐波那契数列与自然 螺旋线的条数是斐波那契数 下图源自:我在向日葵里找到了黄金比例!斐波那契数列与自然 a+ba=ab=1+52=1.61818⋯ \frac{a+b}{a}=\frac{a}{b}=\frac{1+\sqrt{5}}{2}=1.61818\cdots aa+b​=ba​=21+5​​=1.61818⋯ αβ=1+52=1.61818⋯ \frac{\alpha}{\be

一个搬运知识的笨小孩 1537

【C语言】斐波那契数列

斐波那契数列是什么?

... 2万+

服务器安全配置:二、本地安全策略设置

密码最长使⽤期限”设置为“90天”;“⽤可以还原的加密来存储密码”设置为“禁⽤”“复位账户锁定计数器”设置为15分钟,贴图这里是我自己设置的时间,15分钟也够用,具体看自己需要。”网络访问: 不允许 SAM 帐户和共享的匿名枚举“设置为“已启用””网络访问: 限制对命名管道和共享的匿名访问“设置为“已启用””网络访问: 不允许匿名枚举 SAM 帐户“设置为“已启用”“关机: 允许系统在未登录的情况下关闭”设置为“已禁用”(1)交互式登录:不显示最后的⽤户名”设置为“已启⽤”

weixin_48825672的博客 3135

【线粒体基因组数据提交实战】从注释校验到GenBank批量入库的避坑指南

本文详细介绍了线粒体基因组数据从注释校验到GenBank批量上传的全流程避坑指南。重点解析了GB2sequin工具的正确使用方法、TBL注释文件的精修技巧,以及BankIt平台提交的隐藏要点,帮助科研人员高效完成NCBI数据提交,特别适合需要批量上传线粒体基因组数据的研究者。

weixin_28726671的博客 442

Fibonacci 数列及其计算方法

Fibonacci 数列及其计算方法斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的。不过更多的人学习到这个数列是因为意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci)和他的《Liber Abaci》一书。在这本书中,列昂纳多·斐波那契以兔子繁殖为例子引出了这个序列,因此这个序列又称为“兔子数列”。 这个序列的前几项

Ivan 的专栏 4万+

Windows NPS与华为、华三、思科设备RADIUS认证实战指南

本文详细介绍了Windows NPS与华为、华三、思科设备RADIUS认证的实战配置指南。通过NPS服务器统一管理网络设备认证,实现企业级安全访问控制,涵盖基础配置、设备对接及故障排查方法,助力管理员提升网络安全管理效率。

weixin_29284201的博客 505

斐波那契数(Fibonacci)

斐波那契数列的5种高效求解方法。

weixin_51648153的博客 4000

告别第三方插件:官方Fused Library如何重塑Android库的合并与发布流程

本文详细介绍了Android官方推出的Fused Library如何替代第三方fat-aar插件,优化Android库的合并与发布流程。通过原生支持、智能依赖管理等优势,Fused Library解决了版本兼容性、依赖传递等核心痛点,提供了更稳定高效的开发体验。文章还提供了迁移实操指南和工程实践建议,帮助开发者顺利过渡到官方方案。

weixin_42561040的博客 252

长上下文技术的底层逻辑:Attention、压缩、缓存与跨页推理

如果把模型的参数视为“固化智能”,动态智能(Dynamic Intelligence)——模型不必依赖训练时的记忆,而是可以随时调用外部信息。这一点正在改变大模型的范式:Prompt 不再是输入,而是“操作系统事件”文档不再是知识,而是“模型的临时记忆”模型不再是一段神经网络,而是一个“具备阅读循环的推理引擎”当我们把上下文从 128K 拉到百万级,我们做的不是扩容,而是让模型第一次拥有阅读、回溯、定位、跨页分析的能力。这是一种新的智能。

aifs2025的博客 997

斐波那契数列的三种求法 - Fibonacci sequence

第一种:我们最熟悉的递推式:    F(0) = 0 , F(1) = 1,    F(n) = F(n-1)+F(n-2)long long F[10000]={0,1}; long long Fib(int n) //求斐波那契数列的第n项 { if(n==0)return 0; else if(n==1)return 1; else { for(int i=2;i&lt;=n;i...

yhl1999的博客 791

【PCIe硬件】PCIe引脚PRSNT与热插拔

热插拔的基本目的是要让PCIe设备按照规定的顺序、原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行。事实上,PCIe“热插拔”的关键目的就是为前面面所提到的系统RAS服务的,是提升系统RAS能力的非常重要的手段!注意,这里有两个相关概念,前面我们讲的热插拔,其实是广义的“热插拔”。这里的Hot-Plug,为了方便,我们叫做PCIe热插拔,也就是我们现在及后面将要讨论的内容。

smartvxworks的博客 2804

斐波那契Fibonacci数列第n个数的快速求法

f(0)=1,f(1)=1,f(2)=2,f(3)=3…… f(0)=1,f(1)=1,f(2)=2,f(3)=3…… f(0)+f(1)+f(2)+…+f(n)=f(n+2)−1 f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1 证明:f(n)=f(n+2)-f(n+1) f(0)+f(2)+f(4)+f(6)+…+f(2n)=f(2n+1) f(0)+

kylinhao的博客 1309

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | YOLO26引入FDConv频率动态卷积改进,含FDC3k2二次创新,小目标检测,能够捕捉更加丰富和复杂的特征信息

本文提出了一种频率动态卷积(FDConv)模块,用于改进YOLO26目标检测模型的性能。FDConv通过在傅里叶域内划分参数预算,构建具有频率多样性的权重,有效提升了模型对低频和高频信息的处理能力。该模块包含内核空间调制(KSM)和频率带调制(FBM)两个关键组件,分别实现空间级和频域级的动态调节。实验表明,FDConv仅增加3.6M参数就能超越其他需要大幅增加参数的方法,并在目标检测、实例分割等任务中表现优异。文章详细介绍了FDConv的原理、实现方法及在YOLO26中的集成方式,提供了完整的代码实现。

Ai缝合怪、助力小伙伴高效发论文 249

在 SAP S/4HANA Private Cloud 中把标准 CDS View 发布为 OData:可操作的四条路径与完整示例

在 ADT 中创建。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 722

斐波那契(Fibonacci)数列的几种求法及复杂度分析

斐波那契 数列的几种求法及复杂度分析

qq_52839422的博客 2335

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

poj3070 Fibonacci 斐波那契数列的第n项的矩阵求法

对于满足(F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2)的斐波那契数列,第n项可由矩阵求出公式如下:

basement_boy 815

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

NTscan扫描工具

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

C语言-斐波那契(Fibonacci)数列三种不同求法时间复杂度分析

方法一 递归 提起斐波那契数列,首先想到的大概都是递归,但是其时间复杂度并非最优,其时间复杂度为O(2^N)。具体分析可以参考:Fibonacci 方法二 循环 递归之所以效率低下,是因为需要重复的计算一些中间变量。而利用循环可以通过存储中间变量来减小计算量,其时间复杂度为O(N)。 方法三 矩阵乘法 利用矩阵乘法加上分治的思想,可以将其时间复杂度降低到O(log2^n).具体的

生命在于折腾! 5621

廖雪峰Python教程[完整版]

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

七种方式求斐波那契(Fibonacci)数列通项

七种方式求斐波那契(Fibonacci)数列通项

fguihbfg的博客 868

三种方法求解Fibonacci(斐波那契)数列

所谓Fibonacci数列是指这样一种数列,它的前两项均为1,从第三项开始各项均为前两项之和。用数学公式表示出来就是:            1                            (n=1,2) fib(n)=            fib(n-1)+fib(n-2)     (n>2) 可以证明斐波那契数列的通项公式为fib(n) = [(1+√5)/2]^n /√5

JHXSQXY的专栏 1972

斐波那契数列高效递归求法

斐波那契数列高效递归求法

《致青春》——云梦泽 1773

斐波那契的四种求法

首先看一下斐波那契的矩阵表示: 数列的递推公式为:f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)(n&gt;=3)    用矩阵表示为:   进一步,可以得出直接推导公式:   #include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;cstdio&gt; #include&lt;alg...

weixin_34150503的博客 138

剑指Offer面试题9斐波那契数列

面试题9:斐波那契数列 写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列定义如下:n=0时,f(n)=0;n=1时,f(n)=1;n>1时,f(n)=f(n-1)+f(n-2) 思路1:先判断n 比如求f(10),要先求f(9)和f(8),以此类推,如果把f(10)作为二叉树的根节点,那么整个树的节点会有很多重复的,复杂度随n的增加而指数增加。 思路2:更简单的办法不是从n开始往下

login_sonata的博客 921

Fibonacci数列 斐波那契数列

Fibonacci数列 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 样例输入 10 样例输出 55 样例输入 22 样例输出 7704 数据规模与约定 1 <= n <=...

竞仔今天也要努力码一千字 6882
上一篇: N!的末尾有几个零以及二进制表示最右边1的位置
下一篇: 不用循环和递归计算1+2+3+...+100的值
Scandinavians
博客等级 码龄19年 36粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值