【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)
2016-05-29 00:06
921 查看
斐波那契数列:0、1、1、2、3、5、8、13…………
他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和。
它能正常运行,比如计算第10项的结果为55。
但是,计算数字大点的数据,则很慢很慢,因为重复计算太多了。
日志:
View Code
他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和。
> 递归实现
看到这个规则,第一个想起当然是递归算法去实现了,于是写了以下一段:public class RecursionForFibonacciSequence { public static void main(String[] args) { System.out.println(recursion(10)); } public static double recursion(double i) { if (i == 0) { printResult(i, 0); return 0; } if (i == 1) { printResult(i, 1); return 1; } double result = recursion(i - 1) + recursion(i - 2); printResult(i, result); return result; } /** * 打印结果 */ public static void printResult(double i, double result) { System.out.println(i + " -> " + result); } }
它能正常运行,比如计算第10项的结果为55。
但是,计算数字大点的数据,则很慢很慢,因为重复计算太多了。
日志:
recursionTail(1.0, 55.0, 89.0) -> 55.0 recursionTail(2.0, 34.0, 55.0) -> 55.0 recursionTail(3.0, 21.0, 34.0) -> 55.0 recursionTail(4.0, 13.0, 21.0) -> 55.0 recursionTail(5.0, 8.0, 13.0) -> 55.0 recursionTail(6.0, 5.0, 8.0) -> 55.0 recursionTail(7.0, 3.0, 5.0) -> 55.0 recursionTail(8.0, 2.0, 3.0) -> 55.0 recursionTail(9.0, 1.0, 2.0) -> 55.0 55.0
View Code
相关文章推荐
- UIsSearchBar 与tableViewController
- BIOS/UEFI基础——基础知识
- 全球唯一标识GUID
- requirejs 模块化开发中遇到的小问题吓死本宝宝了
- hibernate query.list() 返回的数据类型
- Java学习笔记之String、StringBuffer和StringBuilder
- android Uid 与 Pid 的区别与用法
- ssh学习之旅(3)--himbernate-bug记录-"not-null property references a null or transient value"
- 善用stl。。。。。。。。Codeforces Round #316 (Div. 2) D - Tree Requests
- EntityFramework Code-First 简易教程(七)-------领域类配置之Fluent API
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《04》— 窗体显示
- 回溯法——八皇后问题 n-queens
- Duilib学习笔记《03》— 控件使用
- MySQL的Query Cache原理分析
- hdu2586 How far away ?&& poj1986 Distance Queries(LCA离线求最短距离)
- UI高级之UIWindow
- UI基础-UITableView之自定义不等高cell(纯代码)
- UI基础-UITableView之自定义等高cell