斐波那契数列: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。
但是,计算数字大点的数据,则很慢很慢,因为重复计算太多了。
日志:
1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 6.0 -> 8.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 7.0 -> 13.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 6.0 -> 8.0 8.0 -> 21.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 6.0 -> 8.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 7.0 -> 13.0 9.0 -> 34.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 6.0 -> 8.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 7.0 -> 13.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 5.0 -> 5.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 1.0 -> 1.0 3.0 -> 2.0 1.0 -> 1.0 0.0 -> 0.0 2.0 -> 1.0 4.0 -> 3.0 6.0 -> 8.0 8.0 -> 21.0 10.0 -> 55.0 55.0