Pythonでフィボナッチ数列をコーディングする方法
フィボナッチ数列は、数学で最も有名な数列の1つです。計算は非常に簡単です。シーケンス内の各数値は、前の2つの数値の合計です。
このシーケンスはプログラミングへの道を見つけました。多くの場合、アルゴリズムとループについて開発者をトレーニングするために使用されます。
このガイドでは、Pythonでフィボナッチ数列をコーディングする方法について説明します。フィボナッチ数列を実装するために使用できる2つのアプローチ、反復と再帰を見ていきます。
フィボナッチ数列とは何ですか?
フィボナッチ数列は一連の数字です。各番号は、シーケンス内の前の2つの番号の積です。シーケンスは次のように始まります。
0, 1, 1, 2, 3, 4, 8, 13, 21, 34
あなたが新しい数を計算するのをやめるまで、それは永遠に続きます。シーケンス内の次の数値を計算するためのルールは次のとおりです。
x(n) = x(n-1) + x(n-2)
x(n)は、シーケンスの次の番号です。 x(n-1)は前の項です。 x(n-2)は、最後の用語の前の用語です。
参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。
平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。
Pythonフィボナッチ数列:反復アプローチ
フィボナッチ数列を実装するための反復アプローチについて説明することから始めましょう。
このアプローチでは、特定の条件が満たされるまでリスト内の次の番号を計算する「while」ループを使用します。 whileループが実行されるたびに、コードが繰り返されます。これが、このアプローチが反復と呼ばれる理由です。
まず、いくつかの初期値を設定しましょう。
terms_to_calculate = 9 n1, n2 = 0, 1 counted = 0
4つの変数を宣言しました。
最初の変数は、計算する値の数を追跡します。次の2つの変数n1とn2は、リストの最初の2つの項目です。これらの値を指定する必要があります。そうしないと、プログラムはどこから始めればよいかわかりません。これらの値は、新しい数値の計算を開始すると変更されます。
最後の変数は、Pythonプログラムで計算した用語の数を追跡します。
フィボナッチ数を計算するループを書いてみましょう。
while counted < terms_to_calculate: print(n1) new_number = n1 + n2 n1 = n2 n2 = new_number counted += 1
このwhileループは、計算した値の数が計算したい合計数と等しくなるまで実行されます。ループはn1の値をシェルに出力します。次に、シーケンス内の前の番号をその前の番号に追加して、次の番号を計算します。
n1の値をn2と等しくなるように交換します。これにより、n1は新しい番号の後の最初の番号に戻ります。次に、n2を新しい数と等しくなるように設定します。次に、+ =演算子を使用して、カウントされた変数に1を追加します。
私たちのコードは次を返します:
1
1
2
3
5
8
13
21
私たちのプログラムは、フィボナッチ数列の最初の9つの値を正常に計算しました!
Pythonフィボナッチ数列:再帰的アプローチ
フィボナッチ数列の計算は、再帰の完璧な使用例です。再帰関数は、問題を解決するためにそれ自体に依存する関数です。
再帰関数は、問題をより小さな問題に分解し、それ自体を使用して問題を解決します。計算する数値を追跡する変数を初期化することから始めましょう。
terms_to_calculate = 9
このプログラムは、1つの変数を初期化するだけで済みます。次に、シーケンス内の次の数値を計算する関数を作成できます。
def calculate_number(number): if number <= 1: return number else: return(calculate_number(number-1) + calculate_number(number-2))
この関数は、渡された数値が1以下であるかどうかをチェックします。等しい場合、その数値は計算なしで返されます。それ以外の場合は、calculate_number()関数を2回呼び出して、リスト内の前の2つの項目の合計を計算します。
最後に、関数を実行するメインプログラムを作成する必要があります。
for number in range(terms_to_calculate): print(calculate_number(number))
このループは、terms_to_calculateの値に等しい回数実行されます。つまり、ループは9回実行されます。このループはcalculate_number()
を呼び出します シーケンス内の次の数を計算する方法。この番号をコンソールに出力します。
私たちのコードは次を返します:
1
1
2
3
5
8
13
21
このコードからの出力は、前の例と同じです。
違いは、私たちが使用したアプローチにあります。シーケンス内の次の番号を計算するために自分自身を呼び出す再帰関数を定義しました。再帰的アプローチは、理解しやすいため、通常、反復的アプローチよりも好まれます。
このコードは、反復例よりも大幅に少ない行を使用します。さらに、このプログラムを機能させるには、1つの変数を初期化するだけで済みます。反復例では、4つの変数を初期化する必要がありました。
結論
フィボナッチ数列は、反復的アプローチまたは再帰的アプローチのいずれかを使用して生成できます。
反復アプローチは、シーケンス内の次の数値を計算するためのwhileループに依存します。再帰的アプローチでは、シーケンス内の次の番号を計算するために自分自身を呼び出す関数を定義します。
これで、エキスパートのようにPythonでフィボナッチ数列を計算する準備が整いました。
-
与えられた番号がPythonプログラムでフィボナッチ数であるかどうかを確認するにはどうすればよいですか?
この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 数nが与えられたら、nがフィボナッチ数であるかどうかを確認します n番目のフィボナッチ数は前の2つのフィボナッチ数の合計であることは誰もが知っています。しかし、それらは漸化式以外の興味深い関係も提供します。 (5 * n2 + 4)または(5 * n2 – 4)が完全な正方形である場合に限り、数値は本質的にフィボナッチです。 このプロパティを使用して、数値がフィボナッチであるかどうかを確認します。 では、Pythonスクリプトの実装を見てみましょう- 例 import math # if x is p
-
与えられた数がフィボナッチ数であるかどうかをチェックする方法のためのPythonプログラム?
この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 数nが与えられたら、nがフィボナッチ数であるかどうかを確認します n番目のフィボナッチ数は前の2つのフィボナッチ数の合計であることは誰もが知っています。しかし、それらは漸化式以外の興味深い関係も提供します。 (5 * n2 + 4)または(5 * n2 – 4)が完全な正方形である場合に限り、数値は本質的にフィボナッチです。 このプロパティを使用して、数値がフィボナッチであるかどうかを確認します。 では、Pythonスクリプトの実装を見てみましょう- 例 import math # if x is p