递归7

109 阅读1分钟

递归中一个最简单的题目,斐波那契数列问题,很多人都知道递归暴力,可是为什么暴力呢,因为他有很多重复计算的过程,比如f(6) = f(5) + f(4),f(5) = f(4) + f(3),其中f(4)就被重复计算了。 我们可以采取缓存的方式来稍微优化一下,也就是第二种写法。

public class Class1 {
    public static void main(String[] args) {
        int i = process1(40);
        System.out.println("i = " + i);

        Map<Integer,Integer> map = new HashMap<Integer, Integer>();
        int i2 = process1(40, map);

        System.out.println("i2 = " + i2);
    }
private static int process1(int position){
        if(position == 1 || position == 2){
            return 1;
        }

        return  process1(position-1)+process1(position-2);
    }


    private static int process1(int position,Map<Integer,Integer> map){
        if(position == 1 || position == 2){
            return 1;
        }
        int result = 0;
        if(map.get(position) == null){
            result = process1(position-1,map)+process1(position-2,map);
            map.put(position,result);
        }else{
            return map.get(position);
        }
       return  result;
    }
}