[オファー] [10-1] [フィボナッチ数]

タイトル説明

  我々は、すべての項目のn番目のフィボナッチ数フィボナッチ数列(0から、最初の0は0である)あなたが出力、今フィボナッチ数、および整数を入力するように求めていることを知っているのn。

アイデア解析

  1. 再帰的な考え方は、業務の重複、非効率性の多くがあるでしょう。
  2. 、下から上に計算することができる最初の(0)Fに従って計算され、F(1)(2)F、および次いで(2)Fに従ってfを計算するために(1)、および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;
    }
}

コードリンク

安全コードを証明するためにオファー-Java

おすすめ

転載: www.cnblogs.com/haoworld/p/boffer101-fei-bo-na-qi-shu-lie.html