|
フィボナッチ数列を出力する Python プログラム
フィボナッチ数列に関する質問は、Python の面接で最もよく聞かれる質問の 1 つです。 この記事では、反復と再帰という 2 つの異なる手法を使用してフィボナッチ数列を出力する方法について段階的に説明します。 始める前に、まず基本的な用語を理解しましょう。 フィボナッチ数列とは何ですか?フィボナッチ数列は、指定された数値がその前にある 2 つの数値を加算した結果である一連の数値です。そして、前の 2 つの数値を何度か加算すると、フィボナッチ数列と呼ばれる数列が形成されます。 フィボナッチ数列は 2 つの数値、つまり 0 と 1 で始まります。その後に続く数値はすべて、前の 2 つの数値を加算して構成されます。 たとえば、0 と 1 を考えてみましょう。これらはシーケンスの最初の 2 つの数値です。これらを加算すると 1 になります。したがって、シーケンスは 0、1、1、... と始まります。 次に、次の番号を見つけるには、最後の番号とその前の番号を加算します。したがって、1+1=2 です。つまり、これまでのシーケンスは 0、1、1、2、... となります。意味がわかりますか? これは、0, 1, (1) - [0 + 1] のように数学的に表すことができます。同様に、次のフィボナッチ数は - 0, 1, 1, (2) - [1 + 1] です。等々。最初の 10 個のフィボナッチ数を示す図は次のとおりです。
これはフィボナッチ数列の例です - 0、1、1、2、3、5、8、13、21 34 です。この連続的な数列内では、すべての個々の数値がフィボナッチ数です。 数学的には、フィボナッチ数列は次の式で表されます。 F(n)=F(n-1) + F(n-2)、n > 1。 このシーケンスを使用して、任意の n 番目のフィボナッチ数を見つけることができます。 この魅力的な数列は、フィボナッチとしても知られる数学者レオナルド ピサーノと広く関連付けられています。彼はピサ共和国出身で、そのためピサのレオナルドとしても知られています。 レオナルドは中世で最も才能のある数学者の一人として知られていました。 Python でフィボナッチ数列を出力する方法フィボナッチ数列を出力するコンピューター プログラムは 2 つの異なる方法で作成できます。 繰り返し、そして 再帰的に。 反復とは、指定された条件が満たされるまで作業を繰り返すことを意味します。一方、再帰とは、単一のタスクを実行し、次のタスクに進んで残りのタスクを実行することを意味します。 フィボナッチ数列を出力するための反復アルゴリズムは次のとおりです。2 つの変数を作成し、0 と 1 で初期化します (最初=0、2 番目=1)。 印刷するフィボナッチ数列の長さを追跡する別の変数を作成します (length) ループ (長さはシリーズの長さより短い) 最初と 2 番目を印刷します first 変数と Second 変数を更新します (最初は 2 番目を指し、2 番目は最初 + 2 番目を指します) 長さ変数をデクリメントし、手順 3 から繰り返します。 ループが終了したらプログラムを終了します 反復アルゴリズムの仕組み:長さ 7 のフィボナッチ数列を出力する必要があるとします。その場合、アルゴリズムの流れは次のようになります。 Iterations Steps Explained OutputInitial First = 0, Second = 1 [0, 1] 1 Print (first + second) = [0+1] Now variable first will point to variable second. And second will point to the next Fibonacci number that we calculated above. [0, 1, 1] 2 Print (first + second) = [1+1] Now variable first will point to variable second. And second will point to the next Fibonacci number that we calculated above. [0, 1, 1, 2] 3 Print (first + second) = [1+2] Now variable first will point to variable second. And second will point to the next Fibonacci number that we calculated above. [0, 1, 1, 2, 3] 4 Print (first + second) = [2+3] Now variable first will point to variable second. And second will point to the next Fibonacci number that we calculatod above. [0, 1, 1, 2, 3, 5] 5 Print (first + second) = [3+5] Now variable first will point to variable second. And second will point to the next Fibonacci number that we calculated above. [0, 1, 1, 2, 3, 5, 8] したがって、長さ 7 の最終的なフィボナッチ数列は[0, 1, 1, 2, 3, 5, 8] になります。 フィボナッチ数列を出力するための反復 Python コード:def PrintFibonacci(length): #Initial variable for the base case. first = 0 second = 1 #Printing the initial Fibonacci number. print(first, second, end=" ") #decreasing the length by two because the first 2 Fibonacci numbers #already printed. length -= 2 #Loop until the length becomes 0. while length > 0: #Printing the next Fibonacci number. print(first + second, end=" ") #Updating the first and second variables for finding the next number. temp = second second = first + second first = temp #Decreasing the length that states the Fibonacci numbers to be #printed more. length -= 1 if __name__ == "__main__": print("Fibonacci Series - ") PrintFibonacci(7) pass長さ 7 の出力: Fibonacci Series - 1 1 2 3 5 8コードの説明: 上記のコードでは、まずフィボナッチ数列を出力する関数を定義しました。この関数は長さのパラメーターを受け取り、フィボナッチ数列を出力する必要があります。 次に、最初の 2 つのフィボナッチ値、つまり 0 と 1 を含む 2 つの変数を作成しました。 次に、最初の 2 つの値 [0, 1] を出力し、2 つの値がすでに出力されているため、長さを 2 減分しました。 残りの長さの時間にわたってループを実行し、毎回、最初と 2 番目の変数 (前の 2 つの値を追跡するために最初に作成した) に格納されている前の 2 つの項を加算することによって、次のフィボナッチ値を出力します。 前の 2 つの値を指す 1 番目と 2 番目の値を更新します [first=2 番目、2 番目=前の 1 番目 + 2 番目]。 ループは長さが 0 になるまで実行され、これはフィボナッチ数列の必要な長さが出力されたことを示します。 次に、印刷に必要な長さの引数を渡して、メイン関数からフィボナッチを印刷するために定義された関数を呼び出します。そして、それができました! 再帰を利用してフィボナッチ数列を出力する別のアプローチもあります。ですから、そのアプローチも理解しましょう。 フィボナッチ数列を出力するための再帰的アルゴリズム:前の 1 番目と 2 番目のフィボナッチ数の値を、出力する長さとして受け入れます。 長さが 0 であるかどうかを確認し、関数呼び出しを終了します。 関数のパラメーターで受け取った前の 2 つの値 (1 番目と 2 番目) を加算して、フィボナッチ値を出力します。 1 番目と 2 番目の更新された値、および長さの減少値に対して関数を再帰的に呼び出します。 この再帰関数呼び出しでは、最初と 2 番目の変数にフィボナッチの初期値、つまり (0 と 1) を渡す必要があります。 このアルゴリズムをより深く理解するために、アルゴリズムの Python 実装を見てみましょう。次に、この再帰アルゴリズムがどのように機能するかを理解できるように例を見ていきます。 フィボナッチ数列を出力するための再帰的 Python コード:def PrintFibonacci(first, second, length): #Stop the printing and recursive calling if length reaches #the end. if(length == 0): return #Printng the next Fibonacci number. print(first + second, end=" ") #Recursively calling the function by updating the value and #decrementing the length. PrintFibonacci(second, first+second, length-1) if __name__ == "__main__": #Print initial 2 values. print(0,1,end=" ") #Calling the Function to print the remaining length #fibonacci series PrintFibonacci(0,1,7-2)出力: For Length 7 1 1 2 3 5 8 For Length 10 1 1 2 3 5 8 13 21 34コードの説明: まず、関数を作成し、それに対して再帰を実行します。その関数では、前の 2 つのフィボナッチ数の値を受け入れて、現在のフィボナッチ数を計算しました。そして、基本ケースを追跡する長さを持っています。 再帰の基本ケースでは、長さが 0 に達するかどうかをチェックします。0 に達した場合は、再帰呼び出しを終了します。 他の場合には、前の 2 つのフィボナッチ数を加算することによってフィボナッチ数を出力します。 次に、関数を再帰的に呼び出して、前の 2 つの値を更新し、長さを減分することによって次のフィボナッチ値を出力します。 次に、再帰ツリーを使用して、この関数の再帰呼び出しを視覚化してみましょう。印刷したい長さは 7 です。
再帰呼び出しが行われる前に、main 関数は最初の 2 つの値、0 と 1 を出力します。その後、これらの値を再帰関数に渡します。
再帰関数は値 (0 + 1) を出力し、次に更新される値を使用して再帰的に呼び出します。
次に、再帰関数は値 (1 + 1) を出力し、次に更新される値を使用して再帰的に呼び出します。
ここで、再帰関数は値 (1 + 2) を出力し、次に更新される値を使用して再帰的に呼び出します。
そして、再帰関数は値(2 + 3)を出力し、次に更新された値を使用して再帰的に呼び出します。
ここで、再帰関数は値 (3 + 5) を出力し、次に更新される値を使用して再帰的に呼び出します。
ついに最後の呼び出しが行われます。長さは 0 なので、再帰呼び出しが再び終了し、一連の値がコンソールに表示されます。 時間計算量の分析反復的なアプローチの場合反復アルゴリズムでは、長さが 0 になるまでループします。ループ内で、値の出力と変数の更新という定数時間の操作を実行します。 その長さを n とすると、 時間計算量はO(n)となります。 再帰的アプローチの場合再帰的アプローチでは、指定された長さの回数まで再帰関数を呼び出します。印刷という単純な定数運用も行っております。 したがって、これも長さを n 個と考えると、 時間計算量は O(n) となります。 空間の複雑さの分析反復的なアプローチの場合反復アプローチでは、前の 2 つのフィボナッチ数と任意の数列の長さの定数を追跡する 2 つの変数を受け入れるための追加のメモリは必要ありません。したがって、空間複雑度は定数 O(1) になります。 再帰的アプローチの場合再帰的アプローチでは、長さの関数を何度も呼び出します。再帰が内部でコールスタックを使用することがわかっています。 したがって、それがプログラムによって使用されるメモリであると考えると、再帰呼び出しは長さの回数だけ行われます。この場合、空間複雑度は O(n) になります。 結論フィボナッチ数列は、すべての数値が前の 2 つの数値の加算である一連の数値です。 フィボナッチ数列は数学だけでなく、花の花びら、葉、サボテンの棘など、自然界のあらゆる場所で見られます。 これは面接でよく聞かれる質問でもあるため、その仕組みを知っておくとよいでしょう。 InterviewBit のこの投稿からインスピレーションを得ました。 (责任编辑:) |









