数フィボナッチアルゴリズムの考え方(1)フィボナッチ再帰列を計算しないでください!

これまで再帰を学ぶとき、私は人々の大半はそれを学ぶためにフィボナッチ再帰列を使用していると信じています。

私は、再帰を学ぶときも教師で故意のは、彼らのパフォーマンスを最適化する方法について考えてみましょう、私たちはいくつかの変数を追加し、メモリ消費量を削減するためにデータを渡し、または再帰分割を行うために使用されるパラメータは、1によるいくつかのサブ再帰1に分け、最終的に計算した後にオーバーマージされます。

しかし!私はいつものことを考えすることは、再帰的な達成する方法で、原因再帰的な学習に、生きるために再帰的な学習に限定されていたが、問題を無視することは記事のコメントで、今日まで、最高の最も簡単な方法で対処する必要がありますコンピューティングのパフォーマンスをテストするための実用的な再帰的フィボナッチ列を参照するには面積が急に考えられている:なぜ明らかに、フィボナッチ再帰を使用する配列はああです!単一のホームの配列とその構造、それにより近い上の列の数の面では...

「プログラミング真珠」の第二版で述べたように:構造がこのような構造には、アルゴリズムが決定済みならば、明らかに、より効率的な既存のデータ構造を用いた計算方法に沿ってなければならない優先順位を満たすために、データの既存のデータ構造を有していますあなたが学習しているか、あなたは私のようなもので、アルゴリズムが限られている - >データを、あなたはこの瞬間から別の方法でそれを試してみたいこと:データをプログラムするためのアルゴリズムの形式を決定します。もちろん、その後、上司が時間を与えていない場合は、時間を最適化与えることを究極の目標に最適なソリューション(上司の前提を見つけようとする多面的な試みを達成するための具体的なシーンやターゲットの後に、実際のシーンやターゲット優先の原則に基づいて推奨されますそして、次のレコード、右は?大丈夫よりも優れてバック失われた忘れ)

次の方法の実用化のフィボナッチ配列:

フィボナッチ=一定(N)=> {
   IFtypeof演算のn - == 'ナンバー' N- || <= 0!){
     スロー 新しい新しいエラー( `$ {}最後の中で0数も大きく、nは-しなければならない`); 
  } 
  IF(N- <3 ){
     リターン 1。; 
  } そう IF(N> 1476){   // nは1476に等しい最大値は、以上1476算出された値は、JS表すことができる大きさの値を超え、唯一得る全てインフィニティ
    戻り無限; 
  } 
  CONST resArr = 新しい新しいアレイ(N-).fill(1);   // 第1項と第2項の初期化を省略
  するため(LET = I 2、I <N - 、I ++ ){ 
    resArr [I]= resArr [I - 1] + resArr [I - 2 ]。
  } 
  戻り resArrを[N - 1 ]。
} 

にconsole.log(フィボナッチ( 1476))。// 1.3069892237633987e + 308
console.log(フィボナッチ(1477))。//インフィニティ

それは前よりも小さい場合、nは、オリジナルに基づいてresArrにプッシュする前よりも大きい場合は、単語の多くを使用する必要がある場合、閉鎖またはグローバル(推奨されません)に、ここでresArrの話すことができ、そのよう方法を改善頻繁に時間のかかるデータ・キャッシングアルゴリズムの計算に使用される直接に戻りますが、私たちは今、数回未満を持っていると信じていますが、まだ他のアイデアを置くことができるアルゴリズムは、平均的な時間のかかるを減らすために、フォームを使用することをお勧めします。

私は学ぶために特別なアルゴリズムを実行していないので、あなたはそれが思考のこの行に遭遇した記録することができ、正の批判を歓迎します!

 

おすすめ

転載: www.cnblogs.com/YMaster/p/11356860.html