指定の番号のフィボナッチ数の出力とn番目までのフィボナッチ数列を求める関数を作成しました。
フィボナッチ数列 (Fibonacci number)
フィボナッチ数列は2つの1から始まります。 その後には直前の2つの数の和を書くことを続けます。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, ...
こうやって続いた数列をフィボナッチ数列と呼びます。
また、フィボナッチ数列は黄金比との関係もあります。
黄金比は、1:1.61803..
です。
隣の数値を割っていくと。。。
1 / 1 = 1
2 / 1 = 2
3 / 2 = 1.5
5 / 3 ≒ 1.666666
8 / 5 = 1.6
13 / 8 = 1.625
21 / 13 = 1.61538
段々と黄金比に近づいてきました。
フィボナッチ数列を出力する関数
変数を少なくしました。
"""
フィボナッチ数列
"""
def fb(num):
a, b = 1, 0
for _ in range(num):
print(a)
a, b = a + b, a
if __name__ == "__main__":
fb(20)
"""出力
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
"""
ポイントはa, b = a + b, a
のところです。
直前の数値も保持する必要があるため、次のaにはa + bを、次のbにはaを代入します。
c = a # aは一時変数に渡す必要がある。
a = a + b
b = c
しかし、ひとつずつ代入すると上のように2文字では足りません。
Pythonでは一時変数を使わずに、a, b = a + b, a
といった書き方が可能です。
num番目のフィボナッチ数を返す場合
def fb(num):
"""num番目のフィボナッチ数を返す
"""
a, b = 1, 0
for _ in range(num):
a, b = a + b, a
return b
if __name__ == "__main__":
print(fb(10))
print(fb(100))
print(fb(1000))
"""出力
55
354224848179261915075
43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875
"""
Pythonを初めて学ぶ方へオススメの本です!
Mac、Windows環境の整え方から手を動かして実行できるようになっていきます。
合わせてオンライン学習も進めるとより理解が深まると思います。
オンライン教育のUdemy
Python3の入門オンライン講座
Python:ファイルダウンロードの進行状況とファイルサイズを表示する方法。urllib
Pythonschedule2024-02-27
【Python】tqdmでforの進捗状況を表示する
PythonColabolatoryschedule2021-02-16
学習済みの日本語単語ベクトルをColabolatoryで試してみる
自然言語処理PythonColabolatoryschedule2021-02-04
Unity ML-Agentsで新しく学習環境を作る
Unity機械学習C#PythonDeepLearningschedule2021-01-22
27. 内部リンクの除去
自然言語処理100本ノックPythonschedule2020-03-17