斐波那契数列

本文详细介绍了斐波那契数列的三种常见实现方式:递归、带备忘录的递归算法和动态规划。递归方法简单直观但效率较低,备忘录递归算法通过存储中间结果提高效率,动态规划则通过自底向上的计算避免重复计算,提高了运行速度。三种方法各有优劣,适用于不同的场景。
摘要由CSDN通过智能技术生成
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……
特别指出:第0项是0,第1项是第一个1。

第一种方法:递归

public static int Fibonacci(int n) {
	if(n == 0) {
        return 0;
    }
    if(n == 1) {
        return 1;
    }
    return Fibonacci(n-1) + Fibonacci(n-2);
}

第二种方法:带备忘录的递归算法

//使用哈希map,充当备忘录的作用
static Map<Integer, Integer> tempMap = new HashMap();
public static int Fibonacci(int n) {
    // n = 0 也算1种
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    //先判断有没计算过,即看看备忘录有没有
    if (tempMap.containsKey(n)) {
        //备忘录有,即计算过,直接返回
        return tempMap.get(n);
    } else {
        // 备忘录没有,即没有计算过,执行递归计算,并且把结果保存到备忘录map中,对1000000007取余(这个是leetcode题目规定的)
        tempMap.put(n, (Fibonacci(n - 1) + Fibonacci(n - 2)) % 1000000007);
        return tempMap.get(n);
    }
}

第三种方法:动态规划

public static int Fibonacci(int n) {
  if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    int a = 0;
    int b = 1;
    int temp = 0;
    for (int i = 2; i <= n; i++) {
        temp = (a + b)% 1000000007;
        a = b;
        b = temp;
    }
    return temp;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值