对于很多Java初学者来说,求解斐波拉契数列,基本上所使用的方式都是递归。对于求解斐波拉契数列来说,递归的实现方式的效率是极其低下的。

在此,我贴出三种实现(递归,迭代,动态规划):

我们先看代码的执行效果:

再看代码实现:

package com.aura.funny.fibonacci;import java.util.HashMap;
import java.util.Map;/*** 作者: 马中华   https://blog.csdn.net/zhongqi2513* 时间: 2019/6/10 13:45* 描述:*          斐波拉契数列的三种不同求解方式*          效率截然不一样*/
public class Fibonacci {static Map<String, Long> context = new HashMap<String, Long>();static{context.put("f1", 1L);context.put("f2", 1L);}public static void main(String[] args) {long n = 50;System.out.println("求解斐波拉契数列的第"+n+"项:");// 递归long start1 = System.nanoTime();System.out.println(fibonacci1(n));long end1 = System.nanoTime();System.out.println("递归        消耗总时间:" + (end1 - start1) + "ns");// 动态规划long start2 = System.nanoTime();System.out.println(fibonacci2(n));long end2 = System.nanoTime();System.out.println("动态规划    消耗总时间:" + (end2 - start2) + "ns");// 迭代long start3 = System.nanoTime();System.out.println(fibonacci3(n));long end3 = System.nanoTime();System.out.println("迭代实现    消耗总时间:" + (end3 - start3) + "ns");}// 递归实现public static long fibonacci1(long n){if(n == 1){return 1;}else if(n == 2){return 1;}else{return fibonacci1(n-1) + fibonacci1(n - 2);}}// 动态规划实现public static long fibonacci2(long n){String key = "f" + n;if(context.containsKey(key)){return context.get(key);}else{// 获取前两个,或者算String key1 = "f" + (n - 1);String key2 = "f" + (n - 2);long value1 = 0;long value2 = 0;if(context.containsKey(key1)){value1 = context.get(key1);}else{value1 = fibonacci2(n - 1);context.put(key1, value1);}if(context.containsKey(key2)){value2 = context.get(key2);}else{value2 = fibonacci2(n - 2);context.put(key2, value2);}return value1 + value2;}}// 迭代实现public static long fibonacci3(long n){// 使用迭代算法long f1 = 1;long f2 = 1;long f3 = 0;if(n == 1 || n == 2){return 1;}else{for(int i = 2; i < n; i++){f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;}}
}

希望大家在写代码的时候,除了关注业务功能的实现,还要关注代码的执行效率。

斐波拉契数列 Java三种实现相关推荐

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

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

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

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

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

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

  4. 斐波拉契数列 java实现

    指的是这样一个数列: 1 1 2 3 5 8 13 21 34 ... F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 也称黄金分割数列,兔子数列 通项 ...

  5. 【Java系列】斐波拉契数列

    介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&q ...

  6. c语言编程斐波那契前n项,c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)...

    写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include in ...

  7. python 函数 1.1 斐波拉契数列:这个数列从第三项开始,每一项都等于前两项之和。

    题目:  已知斐波拉契数列的前两项都是1,我们定义求斐波拉契数列的第n项(n<=50)的函数为fbnq,程序主体如下: n=int(input("")) print(fbnq ...

  8. 深入剖析斐波拉契数列

    深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...

  9. 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

最新文章

  1. 一行Python代码能实现什么丧心病狂的功能?
  2. centos7.0 docker安装部署
  3. [Jmeter系列]Jmeter源码编译步骤(转)
  4. C++——重载运算符和重载函数
  5. 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译
  6. angular中的e2e检测sendkeys将绑定值设置为空
  7. 计算机和单片机概述,微机与单片机概述课件.ppt
  8. 2011年12月份第一周51Aspx源码发布详情
  9. CodeForces 650A Watchmen
  10. 关于串口助手(sscom)打开影响32程序跑飞问题。
  11. grads 风向杆值大小
  12. Maven的仓库(转载自Maven实战 作者许晓斌)
  13. 优秀课程案例:使用Scratch制作贪吃蛇大战游戏
  14. 2018-2-13-win10-uwp-活动磁贴
  15. c++ template aliases
  16. 守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
  17. python练习题:输入某年某月某日,判断这一天是这一年的第几天?
  18. 蠎周刊 188: Jays
  19. FPGA+海思Hi3559
  20. 迷你歌词(MiniLyrics)破解小记

热门文章

  1. 在线创建MySQL表
  2. vector<vector>排序
  3. php调用mahout包,mahout实现基于用户的Mahout推荐程序
  4. 什么是SNMP?为什么需要SNMP?
  5. 环境建环和给排水工程计算机应用试卷,环境建环和给水排水工程计算机应用教材内容...
  6. 将闲置电脑搭建成私有云盘,使用ipv6外网使用
  7. 跳跃游戏 Jump Game 分析与整理
  8. 【华为OD笔试真题JAVA实现】幼儿园找出同班的小朋友
  9. AppleCare 扫盲帖,三年苹果狗告诉你 AppleCare 到底值不值得买?
  10. 【JavaSE】JavaSE之控制逻辑