【算法】数学中的斐波那契数列
数学中有一种数列称为 斐波那契数列(Fibonacci sequence), 又称为 黄金分割数列, 因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*) => 可以看出,斐波那契数列是一个线性递推数列
斐波那契数列指的是这样一个数列:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711……
这个数列的规律是: 从这个数列的第3项开始,每一项都等于前面2项之和
那么,在代码中如何来实现这个数列呢 ==》有2个方法,从它的规律可以看出,最简单直接的显然是递归方法, 但是递归方法的效率低 , 尤其是n比较大时,递归的效率是非常非常差的,比如n=100时,估计计算机需要计算个10分钟左右,其时间复杂度是O(2^n) => 也就是说随着n的增加,时间复杂度呈指数级别增长, 因为我们发现在递归的过程中,我们在不断重复计算 f(n-1)和 f(n-2)的值, 即计算数列中的某个数,都会从1开始重新一步一步这样递归计算,这样的效率肯定会很慢
第一种方法: 递归的代码如下
public int Fibonacci(n) {
if(n == 0)
return 0;
if(n == 1 || n==2)
return 1; if(n > 2) return Fibonacci(n-1) + Fibonacci(n-2); }
第二种方法: 迭代实现 => 推荐使用迭代实现的方式,这样的效率要高很多
public int Fibonacci(n) { if(n == 0) return 0; if(n == 1 || n==2) return 1; int left =1, right =1, sum = 0; //定义初始值 // 我们用一个for循环, left、right分别为前两项,sum为前面2项之和,然后进行交换,把right赋给新的left,sum赋给新的right,得到新的sum值 for(int i = 3; i <= n; i++) { sum = left + right; left = right; right = sum; } return sum; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
2017-02-16 Google Analytics添加到网站