public class TestFib { public static void main(String[] args) { long n = 100l; long t1 = System.currentTimeMillis(); long r1 = fib(n); long t2 = System.currentTimeMillis(); //n到达一定大小之后,等待时间漫长到无法忍受,可能万物终点? System.out.println("结果是: " + r1 + ", 耗时: " + (t2 - t1) + "MS"); //无论n多大,几乎都是0MS long t3 = System.currentTimeMillis(); long r2 = fib2(n); long t4 = System.currentTimeMillis(); System.out.println("结果是: " + r2 + ", 耗时: " + (t4 - t3) + "MS"); } /** * 普通方法:冗余计算次数过多,使其运算效率极低 * @param n * @return */ public static long fib(long n) { if(n==0l) { return 0l; } else if(n==1l) { return 1l; } else { return fib(n-1) + fib(n-2); } } /** * 优化后的方法:基本无冗余计算,速度极快 * copy from Elminster in the forum of Java in Javaeye * @param n * @return */ public static long fib2(long n) { long[] results = new long[(int)(n+1)]; for (long i = 0; i < results.length; i++) { if(i==0l) { results[(int)i] = 0l; } else if(i==1l) { results[(int)i] = 1l; } else { results[(int)i] = results[(int)(i-1l)] + results[(int)(i-2l)]; } } return results[(int)n]; } }