先上code
class Test { public static void main(String args[]) { int n = 45; long time1 = now(); System.out.print("fibonacci("+n+") = " + fibonacci(n) ); System.out.println(" cost: " + (now() - time1)); time1 = now(); System.out.print("fibonacci2("+n+") = "+ fibonacci2(n)); System.out.println(" cost: " + (now() - time1)); } public static long now(){ return System.currentTimeMillis(); } public static long fibonacci(int n){ if(n == 1) return 1; if(n == 2) return 1; return fibonacci(n-1) + fibonacci(n-2); } public static long fibonacci2(int n){ long num1 = 1; long num2 = 1; if(n == 1 || n == 2){ return 1; } long numn = 0; for(int i =3;i <= n ; i ++){ numn = num1 + num2; num1 = num2; num2 = numn; } return numn; } }
执行结果:
分析:
fibonacci的实现是基于递归的,会有很多重复的计算。每次计算都是一种崭新的计算,没有充分利用之前计算的结果,造成了严重的浪费。
fibonacci2的实现是基于动态规划的,自底向上,充分利用了上一次的计算结果。性能上相差很大。
本文通过两种不同实现方式对比分析了斐波那契数列的计算效率:一种是基于递归的方法,该方法虽然简洁但计算效率低下;另一种是基于动态规划的方法,这种方法充分利用了之前的计算结果,显著提高了计算速度。
404

被折叠的 条评论
为什么被折叠?



