您的位置:首页 > 产品设计 > UI/UE

【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)

2016-05-29 00:06 921 查看
斐波那契数列:0、1、1、2、3、5、8、13…………

他的规律是,第一项是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: