数据结构预算法-斐波那契数列的四种解法 一mei努力减肥的胖纸 2020-06-24 201 阅读1分钟 1、暴力穷举法 /**** * 暴力穷举 */ private static int fib1(int n){ if(n<=2) return 1; return fib1(n-2)+fib1(n-1); } 2、备忘录解法 /**** * 1、增加一个备忘录 * 2、存储已经计算不过的值 * @param * */ private static int fib2(int n){ if(n<1)return 0; HashMap<Integer,Integer> memo =new HashMap<>(n+1); int result= help(memo,n); return result; } /**** * * @param memo * @param n * @return */ private static int help(HashMap<Integer,Integer > memo,int n){ //基础值 base if(n==1||n==2){ return 1; } //备忘录中存在,直接返回 if(memo.get(n)!=null) return memo.get(n); //每一次计算的值存到备忘录中 int sum =help(memo,n-1) + help(memo,n-2); memo.put(n,sum); return sum; } 3、将备忘录转为数组 /*** * 将备忘录转为数组 * @param n * @return */ private static int fib3(int n){ //定义一个数组,收尾空着不用 int [] array=new int[n+1]; //base array[1] = array [2] = 1; //自底向上往数组储存值 for (int i = 3; i <= n; i++) { array [i] = array [i-1] + array [i-2]; } return array[n]; } 3、数组优化之后 /*** * 优化掉数组 ,用两个变量做临时存储 * @param n * @return */ private static int fib4(int n){ if(n==1||n==2){ return 1; } //base int pre=1; int cur= 1; for (int i = 3; i <=n ; i++) { int sum = pre + cur; pre = cur; cur = sum; } return cur; }