Python でのフィボナッチ数列の実装
公開: 2023-02-23Python は強力で用途の広い多目的プログラミング言語であり、人工ニューラル ネットワークの実装を容易にし、自然言語処理、ディープ ラーニング、顔認識、遺伝的アルゴリズム、およびその他多くの最先端の AI ベースのタスクをサポートします。
この記事では、Python を使用してフィボナッチ数列を正確に生成するための主要な方法のいくつかを探ります。これは、それ自体が有用であるだけでなく、複雑な処理が可能な高度なプログラムを構築するための基礎となる比較的単純なアルゴリズムの好例です。認知機能。
目次
フィボナッチ数列とは?
フィボナッチ数列は、人類に知られている数学的数列の中でおそらく最も単純で、最も古くから知られており、最も有名な数列の 1 つです。
これは整数の連続したシリーズであり、連続する各数値はその前の 2 つの数値の合計に等しくなります。フィボナッチ数列は 0 と 1 で始まり、次のように進みます: 0、1、1、2、3、5、8、13 、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657、46368 など。
ゼロを開始点として、フィボナッチ数列は次のように双方向に無期限に拡張します。
…610、-377、233、-144、89、-55、34、-21、13、-8、5、-3、2、-1、1、0、1、1、2、3、5 、 8, 13, 21, 34, 55, 89, 144, 233, 377, 610… ゼロの左側のシーケンスは、「ネガフィボナッチ」シーケンスとして知られています。
無料のテクノロジー コースをチェックして、競争で優位に立ちましょう。
フィボナッチ数列は、次のように数学的に表すことができます。
n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
× n | 0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 | 144 | 233 | 377 | 610 |
ここで、n は用語番号、x nは用語値です。 項の値 x nを計算する式は次のとおりです。
x n = x n-1 + x n-2
したがって、たとえば項番号 8 の値は次のようになります。
× 8 = × 7 + × 6
× 8 = 13 + 8
× 8 = 21
フィボナッチ数列に関連するちょっとした雑学があります: フィボナッチ デーは 11 月 23 日で、日付は数字の 1、1、2、3 で表されます。これは、フィボナッチ数列の正しく順序付けられたセグメントを表します。
人気のソフトウェア エンジニアリング コースを探す
LJMU & IIITB のコンピューター サイエンスの理学修士号 | カリフォルニア工科大学 CTME サイバーセキュリティ証明書プログラム |
フルスタック開発ブートキャンプ | ブロックチェーンのPGプログラム |
フルスタック開発のエグゼクティブ PG プログラム | |
以下のすべてのコースを表示 | |
ソフトウェア工学コース |
フィボナッチ数列の歴史と起源
一般にフィボナッチとして知られるレオナルド・ピサーノ・ボゴーロは、口語的なイタリア語の用語で大まかに「ボナッチの息子」に翻訳されます。
フィボナッチは、この特別な数列を定式化したとされており、その結果、フィボナッチにちなんで名付けられました。 彼は、13 世紀の初めに、彼の画期的な本であるLiber Abaciを通じて、西ヨーロッパの主要な部分にそれを紹介しました。
フィボナッチは、当時最も才能のある数学者の 1 人として広く知られていましたが、偶然にも、それまではるかに扱いにくいローマ数字を使用していたヒンズー アラビア数字をヨーロッパ全土に広く採用したことでも知られています。
しかし、今日フィボナッチ数列と呼ばれるものは、紀元前 3 世紀には古代インドで使用されていたことが知られています。
それは、サンスクリット語の韻律に関する古代の論文であるピンガラ・スートラや、古代インドの尊敬される賢者であるアチャリヤ・ピンガラとバラタ・ムニにそれぞれ起因する古代インドの舞台芸術に関する論文であるナチャ・シャーストラに表現されています。
シークエンスに関する最も決定的な解説は、8 世紀初頭のビラハンカの著作に見られます。 このテキスト自体は追跡されていませんが、西暦 1135 年のゴパラの著作で参照され、広く引用されています。 偶然にも、その年の数字はフィボナッチ数列の連続を表しています。
別のインドの韻律律の学者であるアチャリヤ・ヘマチャンドラは、この一連のリズムについて深い知識を持っていたと言われ、西暦 1150 年に非常に詳細に記述しています。 これは、フィボナッチの研究より 50 年以上も前のことです。
upGrad のソフトウェア開発コースをチェックしてください
ビネの式
定数係数を持つすべての定数再帰シーケンスと同様に、フィボナッチ数は、Binet の公式として知られるようになった閉じた形式の式として示すことができます。 19 世紀初頭の著名なフランスの数学者、ジャック フィリップ マリー ビネにちなんで名付けられたビネの公式は、次のように表すことができます。
F n が n番目のフィボナッチ数であると仮定すると、次のようになります。
上記の式から導き出せるのは、最初の数個の数を除いて、フィボナッチ数列の連続する各数のペア間の比率が黄金比と呼ばれるものに次第に収束するという事実です。ギリシャ語のアルファベットの文字 – Φ (ファイ)。
これは、系列の各数値がそれに続くフィボナッチ数の 0.6180339887 であるか、または連続する各数値がフィボナッチ数列の前の数値の 1.6180339887 倍であることを意味します。
需要の高いソフトウェア開発スキル
JavaScriptコース | コア Java コース | データ構造コース |
Node.js コース | SQLコース | フルスタック開発コース |
NFTコース | DevOps コース | ビッグデータコース |
React.js コース | サイバーセキュリティコース | クラウドコンピューティングコース |
データベース設計コース | パイソンコース | 暗号通貨コース |
フィボナッチ数列と黄金比
フィボナッチ数列とその派生物である黄金比の重要性は、自然界で驚くほど頻繁に繰り返されるため、大幅に高まっています。 これの最も一般的な例には、次のようなものがあります。
- 3 枚の花弁のユリ、5 枚の花弁のキンポウゲ、21 枚の花弁のチコリの花、34 枚の花弁のデイジーのいずれであっても、花の花びらの数はほぼ常にフィボナッチ数です。
興味深いことに、このフィボナッチ数への完全な一致は、ダーウィンの設計の産物であるように思われます。なぜなら、科学者は、これらの特定の花弁の配置が、これらの花のすべてが日光、湿気、および鳥や昆虫などの受粉の媒介物に最適にさらされることを確実にすることを発見したからです。 . - 黄金比またはΦは、ヒマワリの種子の頭から銀河全体まで、松ぼっくりの突起からハリケーンまで、パイナップルのとげからヤギの角の湾曲まで、そして小花から、ほぼすべての自然に発生する螺旋パターンで見られます。人間の指紋の渦巻きにカリフラワーの。
オウムガイの殻のらせん状のパターンは、「フィボナッチ スパイラル」と呼ばれるものの特に象徴的な表現と考えられています。 - 樹木の枝分かれと根系、蜂の巣の中のオスとメスのミツバチの比率、微生物からカタツムリ、カメからクジラまで、動物のさまざまな体の部分はすべて黄金比に従っています。
- 人間の生理的側面、たとえば、頭から指先までの長さと体長の比率、前腕と手の長さの比率など、すべてΦに基づいて設計されています。
人間の耳の中の蝸牛は、へその緒と同様にフィボナッチ螺旋です。 私たちは無意識のうちに、縦横比が黄金比に近い顔に惹かれているとさえ考えられています。
本質的に、数学はすべてのもののパターンを明らかにする探求です。 母なる自然の膝の上ほど、これらのパターンを探すのに適した、またはより普及したアリーナはありません。
微生物から銀河まで、フィボナッチ数列は、微視的なスケールから宇宙的なスケールまで、圧倒的な数の自然生理学と現象に反映されています。これには正当な理由があります。
黄金比またはΦは、それが表現するすべてのものに美的および機能的調和の人間工学的バランスを与えます。黄金比が神聖な比率とも呼ばれるのはこのためです。
しかし、フィボナッチ数列の重要性は自然界をはるかに超えており、数学、科学、芸術など、人間のさまざまな取り組みの中で表現されています。
ソフトウェア開発に関連する人気記事を読む
Java でデータ抽象化を実装するには? | Javaの内部クラスとは何ですか? | Java 識別子: 定義、構文、および例 |
例を使用して OOPS のカプセル化を理解する | C のコマンド ライン引数の説明 | 2022 年のクラウド コンピューティングの機能と特性トップ 10 |
Java のポリモーフィズム: 概念、型、特徴、および例 | Java のパッケージとその使用方法 | 初心者向け Git チュートリアル: Git をゼロから学ぶ |
Python を使用してフィボナッチ数列を生成する
フィボナッチ数列と黄金比は、次のさまざまな側面に不可欠です。
- 代数、幾何学、統計学、三角法など、さまざまな経済慣行や株式市場分析に適用できます。
- 生物学、物理学、コンピューター サイエンス – 合成生物学と遺伝学、土木工学と機械工学、建築、インテリア デザイン、そしてもちろんコンピューター プログラミングに応用されています。
- アートとグラフィック デザイン、詩、音楽、ダンス
これは、多くの場合、上記の主題およびそれ以降に関連するさまざまな有用なアプリケーションを作成するための基本的なステップです。
フィボナッチ数列は、さまざまなプログラミング言語を使用して生成できます。 前述のように、Python はこれらの中で最も強力で用途の広いものの 1 つであり、最先端のテクノロジ ソリューションを開発するために、さまざまな方法でフィボナッチ数とフィボナッチ数列を使用および操作できます。
IIIT バンガロールのブロックチェーンでの upGrad の高度な証明書プログラマーをチェックしてください
Python を使用してフィボナッチ数列を生成する方法の一部を次に示します。
反復アプローチ
この方法では、アルゴリズム:
- シーケンス内の最初の 2 つの連続する項を表す任意の 2 つの変数を割り当てます。 ここで、0 は数列の最初の項を表し、1 は 2 番目の項を表します。
- シーケンスで計算される項の範囲を設定し、0 から上に向かってループします。
- 各反復で、アルゴリズム:
- 2 つの変数を追加します。
- 次に、2 番目の変数の値を最初の変数に割り当てます。
前の 2 つの変数の合計を 2 番目の変数に加算します。 - 等々…
対応するコードは次のように記述されます。
デフィボ (数値) :
a = 0
b = 1
for i in xrange(0, 20):
印刷する
a、b = b、a + b
対応する出力は、フィボナッチ数列の最初の 20 個の数字になります。
0、1、1、2、3、5、8、13、21、34、55、89、
144、233、377、610、987、1597、2584、4181
再帰的アプローチ
この方法では、アルゴリズムは以下を導出します。
前の 2 つの項の値を合計した、連続する各項の値。 これは、項 n = 項 n-1 + 項 n-2 として表すことができます。
このルールの唯一の 2 つの例外は、項の値が 0 と 1 の場合で、どちらも変更されていない値を返します。 これらの例外は、term n = term n として表すことができます。
対応するコードは次のように記述されます。
def recur_fodo (n):
n < = 1 の場合:
n を返す
それ以外:
return (recur_fibo (n-1) + recur_fibo (n-2) )
N項 = 20
# 項数が正しいかチェック
nerms <= 0 の場合:
print (「正の整数を入力してください」)
それ以外:
print (「フィボナッチ数列」)
範囲内の i の場合 (nterms):
印刷 (recur_fibo i))
対応する出力は、フィボナッチ数列の最初の 20 個の数字になります。
0、1、1、2、3、5、8、13、21、34、55、89、
144、233、377、610、987、1597、2584、4181
フィボナッチ数列のスタンドアロン アプリケーション
さまざまな複雑なモデルやアプリケーションの開発における基本的なステップであることに加えて、フィボナッチ数は、それ自体が特定のタスクの実行において非常に価値のあるいくつかのユニークな特性を持っています。
- フィボナッチ数を使用して、ユークリッドのアルゴリズムの計算実行時間を分析し、ランダムな整数のペアの最大公約数を特定することができます。これは、連続するフィボナッチ数のペアが通常、このアルゴリズムに最も厳しい課題を提示するという事実が与えられているためです。
- フィボナッチ数は完全な数列を一意に表し、系列の各正の整数は 2 つのフィボナッチ数の合計であり、いずれも 1 回しか使用できません。
- フィボナッチ数に基づくアルゴリズムは、フィボナッチ検索手法、フィボナッチ ヒープ データ構造、および並列システムと分散システムを相互リンクするために使用されるフィボナッチ キューブ グラフの開発に役立ちました。
- フィボナッチ数はスクラム ポーカーで使用されます。スクラム ポーカーは、ソフトウェア開発における開発目標を見積もるためのコンセンサス ベースのゲーム化された手法です。
- フィボナッチ レベルのリトレースメントは、株式市場取引のテクニカル分析で一般的に使用されます。
結論は
この記事では、フィボナッチ数列または黄金比 (生物と無生物の両方) の主要な特徴と自然界での驚くほど頻繁な繰り返しに興味を持ってもらえるように努めてきました。
私たちは、芸術と科学、工学と技術、解剖学と遺伝学、経済学と金融など、広く多様で多次元的な人間の探求全体にわたって、この数学的現象が生み出した驚異を再現しようとしました。 .
私たちは、Python と呼ばれる非常に用途の広いプログラミング言語が、これらの数学的概念を操作して、予想外に多様な方法で直接的および間接的に人類に利益をもたらす方法を実現しようとしました。
この Python とフィボナッチ数列の強力な組み合わせが、あなたの想像力をかき立て、心に火をつけ、願望を刺激し、達成の最高の高みへと刺激し続けることを切に願っています。 ハッピーコーディング! 幸せな夢を!
upGrad では、特にソフトウェア開発に関しては、実践的で実践的な学習の重要性を理解しています。 その結果、私たちのコースとトレーニングのイニシアチブは、その核心に実用性があります。 そのようなイニシアチブの 1 つがフルスタック開発ブートキャンプです。これは、フルスタック開発で優れた能力を発揮するために必要なすべての関連スキルを開発するのに役立ちます。