递归的优化
Posted 反复看反复理解
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归的优化相关的知识,希望对你有一定的参考价值。
递归的优化主要有三个方法:
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"); } }
本人倡导的讲解方式:代码示例[学以致用,不仅要知道理论,还要知道理论怎么付诸实践],
文字讲解[不仅知道要怎么用,还要知道是怎么回事],
画图讲解[有图有真相,用图的形式将代码嵌入到理论中,整体理解]
以上是关于递归的优化的主要内容,如果未能解决你的问题,请参考以下文章
使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化