Fibonacci数列
2011-08-18 00:23
162 查看
关于Fibonacci数列的方法,在think in Java一书中的第十五章泛型里面有具体的源代码:
以上是通过迭代,来将Fibonacci数列中的每一项依次迭代出来,每计算一次,前面的几项数都需要重新进行计算一次,因此,在循环次数i比较大的情况下(如i=50),程序运行非常慢。在此,我自己做了一个小小的改进,因为Fibonacci数列实际上只与3项数字相关,我在这里申请了3位的数组来存储这三项,在i=1,2的时候为递归的基准情形,将其置为特例。其后依次循环迭代即可,这样执行速度会明显快很多。代码如下:
不过这里面也有个小bug,就是当i大到一定程度(如当i=100)时,long类型也不够存储所得到的数列值,后面一些值得精度会降低,这里如果想要再改进的话可以考虑java中的大数类了~
public interface Generator<T> { T next(); }
public class Fibonacci implements Generator<Integer>{ public static void main(String[] args) { test1 gen = new test1(); for(int i = 0;i<18;i++){ System.out.print(gen.next()+" "); } } private int count=0; public Integer next() {return fib(count++);} private int fib(int n){ if(n<2) return 1; return fib(n-2)+fib(n-1); } }
以上是通过迭代,来将Fibonacci数列中的每一项依次迭代出来,每计算一次,前面的几项数都需要重新进行计算一次,因此,在循环次数i比较大的情况下(如i=50),程序运行非常慢。在此,我自己做了一个小小的改进,因为Fibonacci数列实际上只与3项数字相关,我在这里申请了3位的数组来存储这三项,在i=1,2的时候为递归的基准情形,将其置为特例。其后依次循环迭代即可,这样执行速度会明显快很多。代码如下:
public static void main(String[] args) { long[] gen = {1,1,1}; for(int i = 0;i<100;i++){ if(i<2) System.out.print(1+" "); else{ gen[0]=gen[1]; gen[1]=gen[2]; gen[2]=gen[1]+gen[0]; System.out.print(gen[2]+" "); } } }
不过这里面也有个小bug,就是当i大到一定程度(如当i=100)时,long类型也不够存储所得到的数列值,后面一些值得精度会降低,这里如果想要再改进的话可以考虑java中的大数类了~
相关文章推荐
- Fibonacci数列的求解法
- Fibonacci数列
- 程序员面试题精选--(05)求Fibonacci数列
- Fibonacci序列 —— O(log n)求Fibonacci数列(非矩阵法)
- O(logn)时间复杂度求Fibonacci数列
- 19、Fibonacci数列探秘
- Fibonacci数列
- Fibonacci数列的非递归实现(Java版)
- 输出Fibonacci数列。
- Fibonacci数列变例之一
- Fibonacci数列
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列)
- wikioi p1978 Fibonacci数列 3
- Fibonacci数列的奇偶性
- 入门训练 Fibonacci数列
- wikioi 1973 Fibonacci数列【输出第N项的值】
- 第6周作业3-Fibonacci数列(网络131黄宇倩)
- 数据结构——算法之(014)( 输入n,用最快的方法求Fibonacci数列的第n项)
- NYOJ461---&&HDU1568-----Fibonacci数列(四)
- NYOJ 题目148 fibonacci数列(二)(矩阵快速幂)