递归的优化主要有三个方法:
1.循环代替递归
2.缓存中间结果优化递归
3.尾递归
我们通过斐波拉契数列来展示性能的优化效果
首先看下普通递归的效果
接着我们使用循环来替代递归
缓存中间结果优化递归
最后,测测尾递归
附上代码
/** * 斐波那契数列 */ public class Fiber { public static int fun(int n){ // 递归结束条件 if(n<=1) return n; //等价关系式 实现功能 return fun(n-1)+fun(n-2); } public static int fun1(int n){ if(n==1 || n==2){ return 1; } int f1 = 1; int f2 = 1; int f3 = f1+f2; while(n>3){ f1=f2; f2=f3; f3 =f1+f2; n--; } return f3; } public static int[] dataCache = new int[46]; public static int fun2(int n){ if(n<=1) { return n; } if(dataCache[n]!=0){ return dataCache[n]; } int res = fun2(n-1)+fun2(n-2); dataCache[n]=res; return res; } public static int fun3(int n,int pre,int res){ if(n<=1){ return res; } return fun3(n-1,res,pre+res); } public static void main(String[] args) { Long start = System.currentTimeMillis(); System.out.println(fun3(45,0,1)); Long end = System.currentTimeMillis(); //1134903170 System.out.println("尾递归优化递归算斐波拉契数列耗时:"+(end - start)+"ms"); } }