Python のフィボナッチ数列
- Python で数式を使用してフィボナッチ数列を作成する
-
Python で
for
ループを使用してフィボナッチ数列を作成する - Python で再帰関数を使用してフィボナッチ数列を作成する
- Python で動的計画法を使用してフィボナッチ数列を作成する
フィボナッチ数列は、数学で一般的で頻繁に使用されるシリーズです。以下に示します。
0,1,1,2,3,5,8,13,21,34,55,89,144,229....
フィボナッチ数列の次の数は、前の 2つの数の合計であり、数学的に Fn = Fn-1 + Fn-2
として表示できます。
シリーズの最初の要素と 2 番目の要素は、それぞれ 0 と 1 です。
このチュートリアルでは、Python でこのようなシーケンスを作成する方法について説明します。
Python で数式を使用してフィボナッチ数列を作成する
フィボナッチ数列のすべての要素は、次の数式を使用して表すことができます。
この式を Python で実装して、必要な数までシリーズを見つけ、シーケンスを出力できます。次のコードはその方法を示しています。
from math import sqrt
def F(n):
return ((1 + sqrt(5)) ** n - (1 - sqrt(5)) ** n) / (2 ** n * sqrt(5))
def Fibonacci(startNumber, endNumber):
n = 0
cur = F(n)
while cur <= endNumber:
if startNumber <= cur:
print(cur)
n += 1
cur = F(n)
Fibonacci(1, 100)
出力:
1.0
1.0
2.0
3.0000000000000004
5.000000000000001
8.000000000000002
13.000000000000002
21.000000000000004
34.00000000000001
55.000000000000014
89.00000000000003
Fibonacci()
関数は、開始番号と終了番号で指定されたシーケンスのある位置でフィボナッチ数を計算します。
Python で for
ループを使用してフィボナッチ数列を作成する
for
ループを使用して関数を作成し、必要なシリーズを実装します。この方法では、必要な長さのシーケンスを出力します。for
ループのみを使用して、必要な長さまで反復し、反復ごとに必要な変数を変更します。次のコードはその方法を説明しています。
def fibonacci_iter(n):
a = 1
b = 1
if n == 1:
print("0")
elif n == 2:
print("0", "1")
else:
print("0")
print(a)
print(b)
for i in range(n - 3):
total = a + b
b = a
a = total
print(total)
fibonacci_iter(8)
出力:
0
1
1
2
3
5
8
13
Python で再帰関数を使用してフィボナッチ数列を作成する
再帰関数はそれ自体を呼び出す関数であり、そのようなメソッドは時間の複雑さを軽減できますが、より多くのメモリを使用します。このような関数を作成して、フィボナッチ数を返し、for
ループを使用して必要なシリーズを出力できます。
例えば、
def rec_fib(n):
if n > 1:
return rec_fib(n - 1) + rec_fib(n - 2)
return n
for i in range(10):
print(rec_fib(i))
出力:
0
1
1
2
3
5
8
13
21
34
Python で動的計画法を使用してフィボナッチ数列を作成する
動的計画法は、問題をサブ問題に分割し、これらのサブ問題の値を保存して解決策を見つける方法です。この方法は通常、問題の最適化に使用され、以下に示すようにフィボナッチ数列を生成するために使用できます。
def fibonacci(num):
arr = [0, 1]
if num == 1:
print("0")
elif num == 2:
print("[0,", "1]")
else:
while len(arr) < num:
arr.append(0)
if num == 0 or num == 1:
return 1
else:
arr[0] = 0
arr[1] = 1
for i in range(2, num):
arr[i] = arr[i - 1] + arr[i - 2]
print(arr)
fibonacci(10)
出力:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
このメソッドでは、シーケンスが配列に格納されることに注意してください。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn