您的位置:首页 > 其它

Fibonacci数列

2011-08-18 00:23 162 查看
关于Fibonacci数列的方法,在think in 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中的大数类了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: