抄来一个例子:关于代码优化,斐波那契数列为例

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];
	}
	
}

你可能感兴趣的:(代码优化)