数据结构与算法-斐波那契数列的四种解法

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;


    }
展开阅读全文
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值