フィボナッチ数:オファー2を受賞

第二に、フィボナッチ数

タイトル説明

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

1.再帰

数1)分析フィボナッチ標準式は、F(1)= 1、F(2)= 1、F(N)= F(N-1)+(N F(N-2)> = 3、式に従ってn∈N*)を直接書くことができます。

2)コード 

パブリック クラスソリューション{
     公共 のintフィボナッチ(INT N){
         場合(N <= 1 ){
             リターンN。
        } 
        戻りフィボナッチ(N-1)+フィボナッチ(N-2 )。
    } 
}

3)複合

時間の複雑さ:O(2 ^ n)の

宇宙複雑:O(1)

2.再帰最適化

1)分析

再帰的計算は、同じデータの多くを繰り返して、我々は、最大8結果を格納する配列を使用します!

2)コード
パブリック クラス溶液{
     公共 のintフィボナッチ(int型N){
         int型年[] = 新しい INT [40 ]。
        年間[ 0] = 0 ; 
        年[ 1] = 1 int型、iが<= N; I = 2 iが++ ){ 
            年[I] =年間[I-1] +年[I-2 ]。
        } 
        戻り[n]の年; 
    } 
}
3)複雑さ:

時間複雑:O(n)は、

時間複雑:O(n)は、

3.記憶域の最適化

1)分析

実際には、我々は、最新の2つの番号を使用する時間を見つけることができますので、我々は唯一の最後の二つの数字、n個のアイテムの格納された値の総和、一つの記憶項目の最初のn-1値は、N-2の二つの記憶を保存することができますアイテムの値。

2)コード
パブリック クラスソリューション{
     公共 のintフィボナッチ(INT N){
         場合(N == 0 ){
             戻り 0 ; 
        } そう であれば(N == 1 ){
             リターン 1 
        } 
        int型の和= 0 int型 2 = 0をint型 1 = 1 ;
        以下のためにint型、I 2 = I ++が; iが<= N ){ 
            合計 = 2 + 1。
            2 = 1;
            1 = 合計。
        } 
        戻り値の和。
    } 
}
3)複雑さ:

時間複雑:O(n)は、

時間の複雑さ:O(1)

4.連続最適化

1)分析

プレート上に見られる観察は、n個のアイテムの合計のみが一度に各計算は、実際には、また、例えば、N-1のストレージアイテムの合計を使用することができ、エンドFを計算する際に(5)の和が保存されてF(5)の値は、ときにFを計算する必要があります(6)において、f(6)= F(5) - F(4)、(5)和F(4)のいずれかに格納されたfがfで、記憶されている(5)-f (3)図は、得られました:     

2)コード
public class Solution {
    public int Fibonacci(int n) {
        if(n == 0){
            return 0;
        }else if(n == 1){
            return 1;
        }
        int sum = 1;
        int one = 0;
        for(int i=2;i<=n;i++){
            sum = sum + one;
            one = sum - one;
        }
        return sum;
    }
}
3). 复杂度

时间复杂度:O(n)

时间复杂度:O(1)

おすすめ

転載: www.cnblogs.com/JimShi/p/11352408.html