Java实现斐波那契数列的三种方法

什么是斐波那契数列

  • 这里借用一下度娘的一段话:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
    其规律很明显,从第3个数开始,每个数都等于它前两个数的和。
    那么通过java可以如何实现斐波那契数列呢?这里介绍三种方法。

1.通过递归实现
通过代码实现以下效果:当你输入n时,会获取斐波那契数列的第n个数的值。

public static int fibonacci(int n){if (n == 1 || n == 2) {             //特殊情况,分开讨论return 1;}if (n > 2) {return fibonacci(n - 1) + fibonacci(n - 2);     //递归调用}return -1;              //如果输入错误的n,一律返回-1}

这种实现方法最简单,也是很容易就能想到的。但是效率太低了,当n>=40时,你会发现计算时间明显变长,当n接近50时,idea运行窗口等了半天才反应过来。
注意:由于int的取值范围有限,最大值为 (2^32)-1 = 2147483647,当n>46的时候,会发生取值范围溢出的情况,所以这里如果想要验证n>46时的计算耗时情况,请将返回值类型int改为long。 例如第2种方法。就将int改为了long。

2.通过for循环的方式实现

public static long fibonacci2(int n) {if (n < 1) {return -1;}if (n ==1 || n == 2) {return 1;}long a =1l, b= 1l, c =0l;     //定义三个long类型整数for (int i = 0; i < n - 2; i++) {c = a + b;           //第3个数的值等于前两个数的和a = b;         //第2个数的值赋值给第1个数b = c;          //第3个数的值赋值给第2个数}return c;}

这种方法相比第1中,明显计算速度提高了不是一点两点,哪怕n>10000,都能瞬间完成计算。

3.通过for循环和数组的方式实现
这种实现方式,其实和第2种实现方式类似,只不过把数据都放到了数组里,可以取出斐波那契数列的第1个一直到第n个的数值。
同样,这里采用了long类型,防止溢出。

public static long fibonacci3(int n) {if (n < 1) {return -1;}if (n == 1 || n == 2) {return 1;}long[] arr = new long[n];arr[0] = arr[1] = 1;        //第一个和第二个数据特殊处理for (int i = 2; i < n; i++) {      arr[i] = arr[i -2] + arr[i - 1];    }//可以得到整个的数列数据 仅n>2System.out.println("数组内容:" + Arrays.toString(arr));return arr[n - 1];}

OK,到这里java实现斐波那契数列的三种写法就全部写完了,如果大家还有其他方法,欢迎交流~

java实现斐波那契数列的三种方法相关推荐

  1. C语言--斐波那契数列(三种方法)

    文章目录 一·介绍 二·代码实现 1·递归实现 2·迭代实现 3·数组实现 一·介绍 斐波那契数列,就是前两个数是1,之后从第三个数开始等于前面两个数的和,请用代码方式求出第n个斐波那契数列的大小. ...

  2. C++输出斐波那契数列的几种方法

    定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那 ...

  3. C语言实现斐波那契数列的几种方法

    斐波那契数列指的是这样一个数列:1 .1.2.3.5.8.13.21.34.55.89--是从第三项开始每一项都是前两项之和. 用递推的方法定义为: f(0)=1;f(1)=1; f(n)=f(n-1 ...

  4. 斐波拉契数列的三种实现方法

    百度解释 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子 ...

  5. C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)

    众所周知,斐波那契数列是非常经典的一个数列,它的数学公式如下 为了便于观察,我们列出它的几项:0  1  1  2  3  5  8  13  21...... 下面我们将介绍四种方法来用C语言计算机 ...

  6. C语言斐波那契数列求和两种方法

    递归调用函数: #define _CRT_SECURE_NO_WARNINGS int fun(int n); #include<stdio.h> int main() {//斐波那契数列 ...

  7. 斐波拉契数列的三种解法

    斐波那契数列: f(n)=f(n-1)+f(n-2); n>=2 f(0)=0; f(1)=1; 即有名的兔子繁衍问题. 斐波那契数列共有三种解法,因而写这篇文章总结一下. 1. 递归求解 递归 ...

  8. java判断斐波那契数列_Java 实例 - 斐波那契数列

    Java 实例 - 斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597, ...

  9. “斐波那契数列”的两种算法

    "斐波那契数列"的两种算法 斐波那契数列有个规律:从第三个数开始,每个数是前两个数之和,比如: 1 1 2 3 5 8 13 21 34 55...... 现在通过两种方式(递归与 ...

  10. Python中斐波那契数列的四种写法

    在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...

最新文章

  1. 【Java_基础】Java中Native关键字的作用
  2. 第三章、一文告诉你FastDFS分布式如何部署
  3. Oracle Export方式数据库备份和恢复(一)
  4. 面试题 17.13. 恢复空格
  5. Cracking the Coding Interview 5.2
  6. 魅族android n内测报名,不再万年Android 5.0! Flyme安卓N内测招募开启
  7. Kafka高性能相关
  8. 华硕服务器主板型号命名规则,常见主板命名规则
  9. Cisco小型局域网配置实验
  10. centos 7增强命令补全
  11. 用python调用ICTCLAS50进行中文分词
  12. 畅捷教育系统服务器,畅捷教育云平台使用手册一、学生操作流程图-畅捷通.PDF...
  13. (转)24种设计模式大全
  14. 米家扫地机器人是石头代工_石头扫地机器人T4全面评测 支持软件虚拟墙,清扫更高效...
  15. matlab fspecial 位置,matlab fspecial 用法解释
  16. 短信验证码 超时 java_短信验证码被刷怎么办?java 短信验证码防刷策略
  17. IDEA中进行spring项目开发配置文件中如何导入spring命名空间
  18. MySQL之redo日志
  19. 深思考AI机器人-巧思首登央视  “以一当十”接受宫颈癌病理专家检验
  20. 记自己开发的淘宝客优惠券

热门文章

  1. IDEA jsp中文乱码
  2. 如何为html代码加密
  3. adadelta算法_【深度学习】深入理解优化器Optimizer算法(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)...
  4. 《社会调查数据管理——基于Stata 14管理CGSS数据》一导读
  5. 软件测试——决策表法
  6. win7系统升级到ie11浏览器(常见错误,升级经验)
  7. 华为模拟器eNSP下载与安装教程(面向小白)
  8. POM文件Unknown报错
  9. 王道训练营作业 C++
  10. Kali Linux基础-抓包与WIFI密码暴力破解