(java)斐波那契数列及其改进

斐波那契数列两种实现方式

1 1 2 3 5 8 13 21 34 55 …

原始

public class FibonacciSequence {
    public int f(int num){
        if(num<=1){
            return num;
        }
        return f(num-1)+f(num-2);
    }

    public static void main(String[] args) {
        int num =10;
        FibonacciSequence fs = new FibonacciSequence();
        int f = fs.f(num);
        System.out.println(f);
    }
}

记忆化定义

原始算法,比如计算f(4)=f(3)+f(2)=(f(2)+f(1))+f(2),可以看出f(2)被重复计算了2次,因此,为了消除上述情况中的重复计算,其中一个想法是将中间结果存储在缓存中,以便我们以后可以重用它们,而不需要重新计算。代码改进如下:

public class FibonacciSequence {
    HashMap<Integer, Integer> map = new HashMap<>();
    public int f(int num){
        if(map.containsKey(num)){
            return map.get(num);
        }
        if(num<=1){
            return num;
        }
        int result = f(num-1)+f(num-2);
        map.put(num,result);
        return result;
    }

    public static void main(String[] args) {
        int num =10;
        FibonacciSequence fs = new FibonacciSequence();
        int f = fs.f(num);
        System.out.println(f);
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值