斐波那契 多种实现 Java

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

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


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 stub
		int 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值