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


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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值