java斐波那契数列的顺序输出
斐波那契数列,即1、1、2、3、5......,从第三个数开始包括第三个数,都为这个数的前两个数之和,而第一第二个数都为1。
下面是java输出斐波那契数列的代码:
import java.util.HashMap;
public class Test{
//定义一个hashMap来存储已经计算并且输出过的值
public static HashMap<Integer, Integer> hashMap = new HashMap<Integer,Integer>();
//递归方法
public static int digui(int num) {
//判断这个值是否已存在,若存在则直接返回该值
if(hashMap.containsKey(num)) {
return hashMap.get(num);
}
if(num<=2) {
System.out.print(1+" ");
hashMap.put(num, 1);
return 1;
}
int sum = digui(num-1)+digui(num-2);
System.out.print(sum+" ");
hashMap.put(num, sum);
return sum;
}
public static void main(String [] args){
digui(10);
}
}
输出结果为:
1 1 2 3 5 8 13 21 34 55
这里最重要的是把已经计算过的值保存起来,再次遇到该值时直接返回,才不会重复计算,从而使得程序运行效率更高,也保证输出结果不会重复。
其实斐波那契数列也可以不用递归来输出,或者说递归的效率反而不高,只不过这个知识点一直是用来练习递归的,所以这里我也就采用递归来输出,但是加了个缓存的HashMap,所以效率比一般的递归还是要快很多。
斐波那契数列别的输出方式输出代码如下:
import java.util.HashMap;
public class Test{
public static void print(int num) {
//第一个数
int first = 1;
//第二个数
int second = 1;
//接收下一个数
int sum = 0;
for(int i = 1;i<=num;i++) {
if(i==1 || i==2) {
System.out.print(1+" ");
}else {
sum = first + second;
System.out.print(sum+" ");
first = second;
second = sum;
}
}
}
public static void main(String [] args){
print(10);
}
}
输出结果如下:
1 1 2 3 5 8 13 21 34 55
第二种方法时间复杂度只有O(num),效率还是非常高的。斐波那契数列还有很多其他的输出方式,这里只是讲几个实现的方法,就不一一列举其他的了。
java斐波那契数列的顺序输出的更多相关文章
- java斐波纳契数列
//斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.-- 这个数列从第三项开始,每一项都等于前两项之和. public class DiGui { public ...
- java 斐波那契数列
package feibo; public class Feibo { static int ss = 50; public static void main(String[] args) { // ...
- Java-Runoob-高级教程-实例-方法:04. Java 实例 – 斐波那契数列
ylbtech-Java-Runoob-高级教程-实例-方法:04. Java 实例 – 斐波那契数列 1.返回顶部 1. Java 实例 - 斐波那契数列 Java 实例 斐波那契数列指的是这样一 ...
- Java:斐波那契数列
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- 几种复杂度的斐波那契数列的Java实现
一:斐波那契数列问题的起源 13世纪初期,意大利数论家Leonardo Fibonacci在他的著作Liber Abaci中提出了兔子的繁殖问题: 如果一开始有一对刚出生的兔子,兔子的长大需要一个月, ...
- 简单Java算法程序实现!斐波那契数列函数~
java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...
- 【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)
斐波那契数列:0.1.1.2.3.5.8.13………… 他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和. > 递归实现 看到这个规则,第一个想起当然是递归算法去实现了, ...
- 斐波那契数列 的两种实现方式(Java)
import java.util.Scanner; /* 斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 如果设F(n)为该数列的第n ...
- Java经典案例之-判断兔子的数量(斐波那契数列)
/** * 描述:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子, * 假如兔子都不死,问每个兔子总数为多少? * 分析:根据题目条件可以推断 * 兔子的规律 ...
随机推荐
- 安装新版Magisk卡在启动页面等问题以及解决办法
手持小米9,之前更新了新版本的Magisk Manager之后,发现手机再打开会一直卡在进入界面无法启动(如下图显示) 逛了逛Github.XDA.Stack Overflow等论坛,大致结论 ...
- [转]关于maven pom.xml中dependency type 为pom的应用
原文地址:http://blog.csdn.net/yao123long/article/details/49925659 dependency为什么会有type为pom,默认的值是什么?depend ...
- 原生js利用data选择元素
//js var a = document.querySelector('[data-word=a]') console.log(a) html <dl class="find-car ...
- 学习springboot第一天~
1. springboot是对spring的缺点进行改善和优化,它的约定大于配置,开箱即用,没有代码生成,也不需要xml文件配置,可以修改属性值来满足需求 2. springboot的入门程序 在id ...
- [Go] 分页计算页码的主要逻辑
当使用imap进行读取邮件体的时候,有个函数可以根据传入的开始和结束索引来一次读取多条邮件内容主要逻辑类似这样,从1开始, 1,10 11,20 21,30 或者 1,31 32,63 ...
- Python入门基础学习(列表/元组/字典/集合)
Python基础学习笔记(二) 列表list---[ ](打了激素的数组,可以放入混合类型) list1 = [1,2,'请多指教',0.5] 公共的功能: len(list1) #/获取元素 lis ...
- PHP连接Navicat For Mysql并取得数据
Navicat For Mysql中新建数据库 数据库中新建表 保存表 表中添加数据 打开ide,输入以下php代码,使用localhost打开该php文件 <?php // ip地址.用户名. ...
- 关于destoon6.0下的ngnix伪静态
关于destoon6.0下的ngnix伪静态配置 ##rewrite nginx rewrite '(.*)\.(asp|aspx|asa|asax|dll|jsp|cgi|fcgi|pl)(.*)' ...
- mask-rcnn环境配置windows
安装pycocotools 这个方法非常简便 但是需要先安装git,并且同时配置一下C++的工具 https://blog.csdn.net/qq_41271957/article/details/8 ...
- LG1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火
问题描述 LG1337 题解 模拟退火模板 记住概率公式: \(exp(\frac{dealt}{T}) \times rand \ge R_A^ND^M_AX\) zzk太欧了,我交了一版没过他来了 ...