java实现斐波那契数列的三种方法
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实现斐波那契数列的三种方法相关推荐
- C语言--斐波那契数列(三种方法)
文章目录 一·介绍 二·代码实现 1·递归实现 2·迭代实现 3·数组实现 一·介绍 斐波那契数列,就是前两个数是1,之后从第三个数开始等于前面两个数的和,请用代码方式求出第n个斐波那契数列的大小. ...
- C++输出斐波那契数列的几种方法
定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那 ...
- C语言实现斐波那契数列的几种方法
斐波那契数列指的是这样一个数列:1 .1.2.3.5.8.13.21.34.55.89--是从第三项开始每一项都是前两项之和. 用递推的方法定义为: f(0)=1;f(1)=1; f(n)=f(n-1 ...
- 斐波拉契数列的三种实现方法
百度解释 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子 ...
- C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)
众所周知,斐波那契数列是非常经典的一个数列,它的数学公式如下 为了便于观察,我们列出它的几项:0 1 1 2 3 5 8 13 21...... 下面我们将介绍四种方法来用C语言计算机 ...
- C语言斐波那契数列求和两种方法
递归调用函数: #define _CRT_SECURE_NO_WARNINGS int fun(int n); #include<stdio.h> int main() {//斐波那契数列 ...
- 斐波拉契数列的三种解法
斐波那契数列: f(n)=f(n-1)+f(n-2); n>=2 f(0)=0; f(1)=1; 即有名的兔子繁衍问题. 斐波那契数列共有三种解法,因而写这篇文章总结一下. 1. 递归求解 递归 ...
- java判断斐波那契数列_Java 实例 - 斐波那契数列
Java 实例 - 斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597, ...
- “斐波那契数列”的两种算法
"斐波那契数列"的两种算法 斐波那契数列有个规律:从第三个数开始,每个数是前两个数之和,比如: 1 1 2 3 5 8 13 21 34 55...... 现在通过两种方式(递归与 ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...
最新文章
- 【Java_基础】Java中Native关键字的作用
- 第三章、一文告诉你FastDFS分布式如何部署
- Oracle Export方式数据库备份和恢复(一)
- 面试题 17.13. 恢复空格
- Cracking the Coding Interview 5.2
- 魅族android n内测报名,不再万年Android 5.0! Flyme安卓N内测招募开启
- Kafka高性能相关
- 华硕服务器主板型号命名规则,常见主板命名规则
- Cisco小型局域网配置实验
- centos 7增强命令补全
- 用python调用ICTCLAS50进行中文分词
- 畅捷教育系统服务器,畅捷教育云平台使用手册一、学生操作流程图-畅捷通.PDF...
- (转)24种设计模式大全
- 米家扫地机器人是石头代工_石头扫地机器人T4全面评测 支持软件虚拟墙,清扫更高效...
- matlab fspecial 位置,matlab fspecial 用法解释
- 短信验证码 超时 java_短信验证码被刷怎么办?java 短信验证码防刷策略
- IDEA中进行spring项目开发配置文件中如何导入spring命名空间
- MySQL之redo日志
- 深思考AI机器人-巧思首登央视 “以一当十”接受宫颈癌病理专家检验
- 记自己开发的淘宝客优惠券
热门文章
- IDEA jsp中文乱码
- 如何为html代码加密
- adadelta算法_【深度学习】深入理解优化器Optimizer算法(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)...
- 《社会调查数据管理——基于Stata 14管理CGSS数据》一导读
- 软件测试——决策表法
- win7系统升级到ie11浏览器(常见错误,升级经验)
- 华为模拟器eNSP下载与安装教程(面向小白)
- POM文件Unknown报错
- 王道训练营作业 C++
- Kali Linux基础-抓包与WIFI密码暴力破解