フィボナッチ数(JAVA版):安全質問10を証明するために第2のフォーラムの提供

トピック:、関数を書く入力N、項目の最初のフィボナッチ数フィボナッチ数列を求めます。次のように定義されたフィボナッチ数列証書:

1、効率は非常に非効率的なソリューションである、目の肥えたインタビュアーが好きではありません

再帰的な実装:

パブリック クラスフィボナッチ{
     公共 長い getNum(int型N){
         場合(N <= 0 ){
             戻り 0 ; 
        } そう であれば(N == 1 ){
             リターン 1 
        } {
             戻り getNum(N-1)+ getNum(N-2 )。
        } 
    } 
}

 

ノードの多くは風雲ツリーに複製され、そしてnは増加が劇的に増加すると、ノードの数は量が急激に増加し、n個の増加として計算されることを意味し、繰り返しになるがあることが私たちを見つけます。実際には、再帰的なNの方法による計算の時間複雑度が指数インクリメントされます。読者は、この再帰がどの程度に減速する感じ、最初の100フィボナッチの試みを模索したいと思うかもしれません。

 

2、インタビュアーは、適切な解決策を探して:

実際には、改良された方法は、複雑ではない、計算の数を減らす、計算中期保存

 

パブリック クラスfibonacci2 {
     パブリック ロング getNum(INT N-){
         IF(N - == 0 ){
             戻り 0 ; 
        } 
        IF(N - == 1 ){
             リターン 1。; 
        } 
        int型 TEMP1 = 0; // アイテムのN 2値
        int型 =のTEMP2 1; // アイテムのN-1値
        のint結果= 0; //は、計算の中間結果を保存する
        ためのint型 I = 2と、I <= N; Iは++ ){ 
            結果 = TEMP1 + のTEMP2、
            TEMP1 =TEMP2; 
            TEMP2 = 結果; 
        } 
        戻り値の結果; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/xhlwjy/p/11259396.html