斐波那契 多种实现 Java

来源:互联网 发布:matlab 最优化工具箱 编辑:程序博客网 时间:2024/06/08 06:50

还有一种是利用矩阵来计算,这种方法是最快的,感兴趣的可以搜一下。

这里的方法其实有两种,一种是递归,一种是迭代,其他的都是在迭代的基础上使用不同的数据结构而已。


package test;import java.util.LinkedList;import java.util.Queue;import java.util.Vector;public class Fibonacci {//递归实现private long fibonacci1(int n) throws Exception{if(n<=0)return 0;if(n==1)return 1;return fibonacci1(n-1)+fibonacci1(n-2);}//迭代实现private long fibonacci2(int n) throws Exception{if(n<0)throw new Exception("Invaild paramter");int[] result = {0, 1};if(n < 2 )return result[n];long fibNMinusOne = 1;long fibNMinusTwo = 0;long fibN = 0;for(int i=2; i<=n; ++i){fibN = fibNMinusOne + fibNMinusTwo;fibNMinusTwo = fibNMinusOne;fibNMinusOne = fibN;}return fibN;}//公式实现private double fibonacci3(int n){double gh5 = Math.sqrt((double)5);return (Math.pow((1+gh5),n)-Math.pow((1-gh5), n))/(Math.pow((double)2, n)*gh5);}//队列实现private int fibonacci4(int n){Queue<Integer> queue = new LinkedList<>();if(n<0){return -1;}queue.offer(0);queue.offer(1);for(int i=2; i<=n; ++i){queue.offer(queue.poll()+queue.peek());}queue.poll();return queue.peek();}//向量实现private int fibonacci5(int n){if(n<0){return -1;}Vector<Integer> vector = new Vector<>();vector.addElement(0);vector.addElement(1);for(int i=2; i<=n; ++i){vector.addElement(vector.firstElement()+vector.lastElement());vector.remove(0);}return vector.lastElement();}//数组实现private int fibonacci6(int n){if(n<0)return -1;if(n<3){return 1;}int[] data = new int[n+1];data[0] = 0;data[1] = 1;for(int i=2; i<n+1; ++i){data[i] = data[i-1]+data[i-2];}return data[n];}public static void main(String[] args) throws Exception {// TODO Auto-generated method stubint n = 3 ;int n1 = 5 ;int n2 = 10 ;int n3 = 0 ;int n4 = 1 ;int n5 = 2 ;int n6 = 40 ;Fibonacci fibonacci = new Fibonacci();System.out.println(n+" : "+fibonacci.fibonacci1(n)+" : "+fibonacci.fibonacci2(n)+" : "+fibonacci.fibonacci3(n)+" : "+fibonacci.fibonacci4(n)+" : "+fibonacci.fibonacci5(n)+" : "+fibonacci.fibonacci6(n));System.out.println(n1+" : "+fibonacci.fibonacci1(n1)+" : "+fibonacci.fibonacci2(n1)+" : "+fibonacci.fibonacci3(n1)+" : "+fibonacci.fibonacci4(n1)+" : "+fibonacci.fibonacci5(n1)+" : "+fibonacci.fibonacci6(n1));System.out.println(n2+" : "+fibonacci.fibonacci1(n2)+" : "+fibonacci.fibonacci2(n2)+" : "+fibonacci.fibonacci3(n2)+" : "+fibonacci.fibonacci4(n2)+" : "+fibonacci.fibonacci5(n2)+" : "+fibonacci.fibonacci6(n2));System.out.println(n3+" : "+fibonacci.fibonacci1(n3)+" : "+fibonacci.fibonacci2(n3)+" : "+fibonacci.fibonacci3(n3)+" : "+fibonacci.fibonacci4(n3)+" : "+fibonacci.fibonacci5(n3)+" : "+fibonacci.fibonacci6(n3));System.out.println(n4+" : "+fibonacci.fibonacci1(n4)+" : "+fibonacci.fibonacci2(n4)+" : "+fibonacci.fibonacci3(n4)+" : "+fibonacci.fibonacci4(n4)+" : "+fibonacci.fibonacci5(n4)+" : "+fibonacci.fibonacci6(n4));System.out.println(n5+" : "+fibonacci.fibonacci1(n5)+" : "+fibonacci.fibonacci2(n5)+" : "+fibonacci.fibonacci3(n5)+" : "+fibonacci.fibonacci4(n5)+" : "+fibonacci.fibonacci5(n5)+" : "+fibonacci.fibonacci6(n5));System.out.println(n6+" : "+fibonacci.fibonacci1(n6)+" : "+fibonacci.fibonacci2(n6)+" : "+fibonacci.fibonacci3(n6)+" : "+fibonacci.fibonacci4(n6)+" : "+fibonacci.fibonacci5(n6)+" : "+fibonacci.fibonacci6(n6));}}


0 0
原创粉丝点击