PHP のフィボナッチ数列の N アルゴリズム

まえがき
少し前に、私はフィボナッチ数列の計算を最適化する従来の再帰的手法に出会いました。しかし、あるとき、良い方法が間に合わなかったので、後で関連する情報を検索し、さまざまな計算ソリューションをまとめて、それをみんなで共有し、コミュニケーションをとり、一緒に学びました。
お勧め: 「PHP ビデオ チュートリアル 」
フィボナッチ数とは
フィボナッチ フィボナッチ数列とも呼ばれます黄金分割数列として知られるこの数列は、数学者レオナルドダ フィボナッチがウサギの繁殖を例として紹介したものであるため、「ウサギ数列」とも呼ばれています。 、8、13、21、34、...数学的には、フィボナッチ数列は次のように再帰的に定義されます: F(1)=1、F (2)=1、F(n)=F(n - 1) F( n - 2) (n ≥ 3、n ∈ N*)。
フィボナッチ数
を理解したところで、さまざまな方法を使用して N 番目のフィボナッチ数を計算して取得します。
通常の再帰
この方法は最も一般的で、定義に直接基づいていますF(n)=F(n - 1) F(n - 2 )
再帰計算で十分ですが、パフォーマンスは最低になります。
/** * 普通递归 * @param int $n * @return int */function fib($n = 1){ // 低位处理 if ($n < 3) { return 1; } // 递归计算前两位 return fib($n - 1) + fib($n - 2); }
再帰的最適化
上記の再帰的手法からわかるように、多くの繰り返し計算が実行され、パフォーマンスが非常に低下します。計算の数が多すぎます。ひどいことです。繰り返しの計算はパフォーマンスに影響するため、最適化は繰り返しの計算を減らすことから始まります。つまり、以前に計算された計算を保存することで、過度の繰り返し計算を回避し、再帰的アルゴリズムを最適化します。
/** * 递归优化 * @param int $n * @param int $a * @param int $b * @return int */function fib_2($n = 1, $a = 1, $b = 1){ if ($n > 2) { // 存储前一位,优化递归计算 return fib_2($n - 1, $a + $b, $a); } return $a; }
メモリ ボトムアップ
ボトムアップでは、フィボナッチ数の部分問題を繰り返し計算し、計算値を保存し、計算値を渡します。 for
ループを使用して、再帰によって引き起こされる二重計算の問題を軽減します。
/** * 记忆化自底向上 * @param int $n * @return int */function fib_3($n = 1){ $list = []; for ($i = 0; $i <= $n; $i++) { // 从低到高位数,依次存入数组中 if ($i < 2) { $list[] = $i; } else { $list[] = $list[$i - 1] + $list[$i - 2]; } } // 返回最后一个数,即第N个数 return $list[$n]; }
下から上に反復します
最下位ビットが初期化されて割り当てられます。for
を使用して下位ビットから上位ビットまで反復しますN 番目の番号を取得します。
/** * 自底向上进行迭代 * @param int $n * @return int */function fib_4($n = 1){ // 低位处理 if ($n <= 0) { return 0; } if ($n < 3) { return 1; } $a = 0; $b = 1; // 循环计算 for ($i = 2; $i < $n; $i++) { $b = $a + $b; $a = $b - $a; } return $b; }
数式メソッド
フィボナッチ数列と黄金比の関係を理解して、黄金比を使って N
フィボナッチ数を計算します。 。
/** * 公式法 * @param int $n * @return int */function fib_5($n = 1){ // 黄金分割比 $radio = (1 + sqrt(5)) / 2; // 斐波那契序列和黄金分割比之间的关系计算 $num = intval(round(pow($radio, $n) / sqrt(5))); return $num; }
無敵の殴り方
この方法については詳しく説明しません。誰もが知っている方法ですが、安易に試さないでください...

/** * 无敌欠揍法 * @param int $n * @return int */function fib_6($n = 1){ // 列举了30个数 $list = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269]; return $list[$n]; }
最後に
わかりました。解決策をいくつか書きました。何か間違っている場合は、指摘してください。他の計算方法がある場合は、共有して一緒に学び、コミュニケーションを図ることができます。ありがとうございます。
以上がPHP のフィボナッチ数列の N アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C++ でフィボナッチ数列アルゴリズムを使用する方法 フィボナッチ数列は非常に古典的な数列であり、その定義は、各数値が前の 2 つの数値の合計であるということです。コンピューター サイエンスでは、C++ プログラミング言語を使用してフィボナッチ数列アルゴリズムを実装することは、基本的かつ重要なスキルです。この記事では、C++ を使用してフィボナッチ数列アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。 1. 再帰的手法 再帰的手法は、フィボナッチ数列アルゴリズムの一般的な手法です。 C++ では、フィボナッチ数列アルゴリズムは再帰を使用して簡潔に実装できます。下

PHP プログラミングでは、アルゴリズムは不可欠な部分です。一般的なアルゴリズムをマスターすると、コードの効率が向上するだけでなく、その後のプログラム設計にも役立ちます。 PHP プログラミングにおける一般的なアルゴリズムは次のとおりです。 ソート アルゴリズム ソート アルゴリズムとは、特定のルールに従って一連のデータを順序付けられたシーケンスに配置することを指します。 PHP プログラミングで一般的に使用されるソート アルゴリズムには、バブル ソート、挿入ソート、選択ソート、クイック ソートなどが含まれます。このうち、クイックソートは最も時間計算量が低いソートアルゴリズムであり、大規模なデータの処理に適しています。検索アルゴリズム 検索アルゴリズム

Python でフィボナッチ数列を解くアルゴリズムを作成するにはどうすればよいですか?フィボナッチ数列は、次のように定義される古典的な数列です。最初と 2 番目の数値は両方とも 1 で、3 番目の数値以降、各数値は前の 2 つの数値の合計になります。つまり、1,1,2,3,5,8,13,21,34,... Python では、ループまたは再帰を使用して、フィボナッチ数列を解くアルゴリズムを作成できます。これら 2 つのメソッドの具体的な実装を以下に紹介します。方法 1: ループを使用するループを使用する

PHP は、さまざまなデータ型とアルゴリズムをサポートする非常に人気のあるプログラミング言語であり、配列の並べ替えと検索アルゴリズムは基本的かつ重要な部分です。この記事では、PHP で一般的に使用される配列の並べ替えと検索のアルゴリズムと、そのアプリケーション シナリオと効率分析について紹介します。 1. 配列のソート PHP は、バブル ソート、挿入ソート、選択ソート、クイック ソート、マージ ソートなど、さまざまな配列のソート方法を提供します。以下は、一般的に使用されるいくつかのアルゴリズムの紹介とサンプル コードです。 バブル ソート (BubbleSort)

フィボナッチ数列は、最初の 2 つの数値を加算することで得られる一連の数値です。フィボナッチ数列は 2 つの数値 f0 と f1 で始まります。 fo と f1 の初期値は 0、1 または 1、1 です。フィボナッチ数列は次の条件を満たします。 fn=fn-1+fn-2 アルゴリズムはフィボナッチ数列のアルゴリズムを指します。 STARTStep1:Readintegervariablea,b,catruntimeStep2:Initializea=0andb=0Step3:Computec=a+bStep4:PrintcStep5:Seta=b,b=cStep6:Repeat3to5fornt

インターネットの普及とアプリケーションの継続的な拡大に伴い、プログラミング言語の開発の重要性がますます高まっています。非常に人気のあるプログラミング言語として、PHP も絶えず開発されています。 PHP を使用したプログラミングの過程で、PHP 開発者は、何らかの知識を表現し、アルゴリズムを自動的に生成する必要に直面する場合があります。では、PHP で知識を表現し、アルゴリズムを自動生成するにはどうすればよいでしょうか?この記事では以下でこれについて説明します。 1. 知識表現 知識表現は人工知能の分野において非常に重要な問題です。知る

PHP アルゴリズム分析: 二分探索アルゴリズムを使用して、順序付けされた配列内の要素をすばやく見つけるにはどうすればよいですか?概要: 二分探索アルゴリズムは、順序付けされた配列内の特定の要素を見つけるのに適した効率的な検索アルゴリズムです。この記事では、二分探索アルゴリズムの原理を詳しく紹介し、PHP コード例を示します。原理: 二分探索アルゴリズムは、探索範囲を半分に減らすことを繰り返すことで、ターゲット要素を迅速に見つけます。処理としては、まず検索範囲を配列の先頭と末尾に絞り、次に中央要素のインデックスを計算して対象要素と比較し、その後、検索範囲を配列の先頭と末尾に絞ります。

PHP は Web 開発で広く使用されているスクリプト言語であり、動的な Web サイトの構築においてますます優れています。 Web 開発では、データ構造とアルゴリズムは他のプログラミング カテゴリと同様に重要であり、プログラムの実行効率に与える影響は特に重要です。特に、大量のデータの保存と処理、または高いプログラム パフォーマンス要件を伴うシナリオでは、データ構造とアルゴリズムは無視できない部分になっています。この記事では主に、PHP で一般的に使用されるデータ構造とアルゴリズムをいくつか紹介します。 1. データ構造配列 PHP 配列は非常に一般的です
