查找斐波那契数

/**
 * 找出斐波那契数
 *
 */
public class ImprovedFibonacci {

	/**
	 * 复杂度O(2^n)
	 * @param index 第index个斐波那契数
	 * @return
	 */
	private static long fib(long index){
		if(index==1){
			return 0;
		} else if(index==2){
			return 1;
		} else {
			return fib(index-1)+fib(index-2);
		}
	}
	
	/**
	 * 复杂度O(n)
	 * @param index 第index个斐波那契数
	 * @return
	 */
	private static long fib2(long index){
		long f0 = 0;
		long f1 = 1;
		long f2 = 1;
		
		if(index==1){
			return f0;
		} else if(index==2){
			return f1;
		}
		
		for(int i=3;i<index;i++){
			f0 = f1;
			f1 = f2;
			f2 = f0+f1;
		}
		return f2;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("Enter an index for Fibonacci number:");
		
		while(scanner.hasNext()){
			long index = scanner.nextLong();
			if(index==0){
				System.exit(0);
			} else {
				System.out.println("Fibonacci num at index "+index +" is "+fib2(index));
			}
		}
	}
}

猜你喜欢

转载自ncs123.iteye.com/blog/2087069