Skip to content

介绍

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给定 n ,请计算 F(n) 。

答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。

题解

循环迭代法

ts
class Solution {
    public int fib(int n) {
        if (n == 0 || n == 1) {
            return n;
        }
        int a = 0, b = 1, sum = 0;
        for (int i = 2; i <= n; i++) {
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return sum;
    }
}

多路递归-优化-记忆法

ts
/**
     * 使用 Memoization(记忆法,也称备忘录)改进
     */
    public static int fibonacci(int n) {
        if(n==0){
            return 0;
        }
        int[] cache = new int[n + 1];
        Arrays.fill(cache,-1);
        cache[0]=0;
        cache[1]=1;
        return f(n, cache);
    }


    /**
     * 递归求斐波那契第n项
     */
    public static int f(int n,int[] cache){
        /*if (n==0) {
            return 0;
        }
        if (n==1) {
            return 1;
        }*/
        if (cache[n] != -1) {
            return cache[n];
        }
        cache[n] = f(n - 1, cache) + f(n - 2, cache);
        return cache[n];
    }

笔记

求出sum,滑动刷新a,b的值(向左覆盖一位
以sum为参照物:
a = b; // 将前一项的值赋给前前项
b = sum; // 将新计算的值赋给前一项
那么就可以求出下一个sum

变体

兔子问题,青蛙爬楼梯

上次更新于: