斐波拉契数列 Java三种实现
对于很多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三种实现相关推荐
- 斐波拉契数列的三种解法
斐波那契数列: f(n)=f(n-1)+f(n-2); n>=2 f(0)=0; f(1)=1; 即有名的兔子繁衍问题. 斐波那契数列共有三种解法,因而写这篇文章总结一下. 1. 递归求解 递归 ...
- 斐波拉契数列的三种实现方法
百度解释 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子 ...
- C语言--斐波那契数列(三种方法)
文章目录 一·介绍 二·代码实现 1·递归实现 2·迭代实现 3·数组实现 一·介绍 斐波那契数列,就是前两个数是1,之后从第三个数开始等于前面两个数的和,请用代码方式求出第n个斐波那契数列的大小. ...
- 斐波拉契数列 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*) 也称黄金分割数列,兔子数列 通项 ...
- 【Java系列】斐波拉契数列
介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&q ...
- c语言编程斐波那契前n项,c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)...
写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include in ...
- python 函数 1.1 斐波拉契数列:这个数列从第三项开始,每一项都等于前两项之和。
题目: 已知斐波拉契数列的前两项都是1,我们定义求斐波拉契数列的第n项(n<=50)的函数为fbnq,程序主体如下: n=int(input("")) print(fbnq ...
- 深入剖析斐波拉契数列
深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...
- 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法
写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...
最新文章
- 一行Python代码能实现什么丧心病狂的功能?
- centos7.0 docker安装部署
- [Jmeter系列]Jmeter源码编译步骤(转)
- C++——重载运算符和重载函数
- 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译
- angular中的e2e检测sendkeys将绑定值设置为空
- 计算机和单片机概述,微机与单片机概述课件.ppt
- 2011年12月份第一周51Aspx源码发布详情
- CodeForces 650A Watchmen
- 关于串口助手(sscom)打开影响32程序跑飞问题。
- grads 风向杆值大小
- Maven的仓库(转载自Maven实战 作者许晓斌)
- 优秀课程案例:使用Scratch制作贪吃蛇大战游戏
- 2018-2-13-win10-uwp-活动磁贴
- c++ template aliases
- 守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
- python练习题:输入某年某月某日,判断这一天是这一年的第几天?
- 蠎周刊 188: Jays
- FPGA+海思Hi3559
- 迷你歌词(MiniLyrics)破解小记