package cn.xf.algorithm.ch02; import java.util.Vector; /** * 斐波那契数列 * @author xiaof * */ public class Fib { /** * 方式1,递归计算效率非常差双重指数级(不要问我怎么算的,我不会) * 计算方法:百度=》带常系数的齐次二阶线性递推式 * @param n * @return */ public static Long fib1(int n) { if(n <= 1) return (long) n; else return fib1(n - 1) + fib1(n - 2); } public static Long fib2(int n) { Long f0 = 0l; Long f1 = 1l; // Long fibn = f1 + f2; Long fibn = 0l; for(int i = 2; i <= n; ++i) { fibn = f0 + f1; f0 = f1; f1 = fibn; } return fibn; } public static Vector<Long> fib3(int n) { Vector<Long> fib = new Vector<Long>(); fib.setSize(n + 1); fib.set(0, 0l); fib.set(1, 1l); for(int i = 2; i <= n; ++i) { fib.set(i, fib.get(i - 1) + fib.get(i - 2)); } return fib; } public static void main(String[] args) { System.out.println(Fib.fib1(10)); System.out.println("******************************"); System.out.println(Fib.fib2(10)); System.out.println("******************************"); Vector<Long> result = Fib.fib3(10); for(Long l : result) { System.out.print(l + " "); } } }