ホームページ  >  記事  >  バックエンド開発  >  Pythonでフィボナッチ数列を実装する方法の例

Pythonでフィボナッチ数列を実装する方法の例

高洛峰
高洛峰オリジナル
2017-01-14 16:48:122315ブラウズ

はじめに

黄金分割数列としても知られるフィボナッチ数列は、次のような数列を指します: 0、1、1、2、3、5、8、13、21... 数学では、フィボナッチ数列は次のとおりです。次のように再帰的に定義されます:

F(0)=0、F(1)=1、F(n)=F(n-1)+F(n-2) (n≥2、n∈ N*)。

Pythonでフィボナッチ数列を実装する方法の例

1.タプルの実装

fibs = [0, 1]
for i in range(8):
 fibs.append(fibs[-2] + fibs[-1])

これは、指定された範囲内のフィボナッチ数のリストを取得できます。

2. イテレーターを実装します

class Fibs:
 def __init__(self):
  self.a = 0
  self.b = 1
 
 def next(self):
  self.a, self.b = self.b, self.a + self.b
  return self.a
 
 def __iter__(self):
  return self

これは、次の方法でアクセスできる無限シーケンスを取得します:

fibs = Fibs()
for f in fibs:
 if f > 1000:
  print f
  break
 else:
  print f

3. カスタム クラスを通じて実装します

class Fib(object):
 def __getitem__(self, n):
  if isinstance(n, int):
   a, b = 1, 1
   for x in range(n):
    a, b = b, a + b
   return a
  elif isinstance(n, slice):
   start = n.start
   stop = n.stop
   a, b = 1, 1
   L = []
   for x in range(stop):
    if x >= start:
     L.append(a)
    a, b = b, a + b
   return L
  else:
   raise TypeError("Fib indices must be integers")

これは、シーケンスに似たデータ構造を取得します。データにアクセスするには、次のマークを使用してアクセスできます:

f = Fib()
print f[0:5]
print f[:10]

4. Python は、フィボナッチ数列の比較的単純な例を実装します

最初にフィボナッチ数列を配置して見てみましょう...

0 1 1 2 3 5 8 13 21 34 55 89 144 233...

最初に値を割り当てます最初の 2 つの変数に:

i, j = 0, 1

もちろん、次のように書くこともできます:

i = 0
j = 1

次に、範囲を 10,000 以内に設定します:

while i < 10000:

次に、while ステートメントで i を出力し、ロジックを設計します:

print i,
i, j = j, i+j

Youここで注意が必要です: "i, j = i, i +j" このコードは次のように書くことはできません:

i = j
j = i+j

このように書くと、j は最初の 2 桁を加算した値ではなく、 j によって値が割り当てられた i と j を加算した値。この場合、出力は次のようになります:

0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192

正しいコード全体は次のようになります:

i, j = 0, 1
while i < 10000:
 print i,
 i, j = j, i+j

最後に実行結果を表示します。 :

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765


概要

以上は、Python を使用してフィボナッチ数列を実装する方法についてでした。 さて、この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。通信するためにメッセージを残してください。

Python でフィボナッチ数列を実装する方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。