【Offer】[10-1] 【斐波那契数列】

题目描述

  大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

思路分析

  1. 递归的思路,会出现很多重复的操作,效率低下;
  2. 可以从下往上计算,首先根据f(0)和f(1)计算出f(2),再根据f(1)和f(2)计算出f(3),一次类推,可以计算出第n项。算法的时间复杂度为O(n);

Java代码

public class Offer010_1 {
    public static void main(String[] args) {
        System.out.println(Fibonacci(8));
    }
    public static int Fibonacci(int n) {
        return Solution2(n);
    }
    /**
     * 递归的思路
     * @param n
     * @return
     */
    private static int Solution1(int n) {
        if(n<=0) {
            return 0;
        }
        if(n==1) {
            return 1;
        }
        
        return Solution1(n-1)+Solution1(n-2);
    }
    
    /**
     * 把计算过的只保存起来,保存前面的两项,计算的过程中给前面两项重新赋值
     * @param n
     * @return
     */
    private static int Solution2(int n) {
        int[] arr = {0,1};
        if(n<2) {
            return arr[n];
        }
        int fm1 = 1;// 当前数 前面的第1个数
        int fm2 = 0;//当前数的前面的第2个数
        int fN =0;
        for(int i=2;i<=n;++i) {
            fN = fm1+fm2;
            fm2 = fm1;
            fm1 = fN;
        }
        return fN;
    }
}

代码链接

剑指Offer代码-Java

猜你喜欢

转载自www.cnblogs.com/haoworld/p/boffer101-fei-bo-na-qi-shu-lie.html