問題
フィボナッチ数列の項のうち、
- 偶数 かつ 1000未満の項
を全て足した値を求め、表示させよ。
解答
解説
この問題のポイントは次の2点です。
- フィボナッチ数列を求める
- 偶数の場合、加算する
順番に見ていきます。
フィボナッチ数列を求める
この問題はフィボナッチ数列を知らないと詰んでしまいます。
フィボナッチ数列とは、次のような漸化式で定義される数列のことです。

0、1、で始まり、その次は0と1を足した1、その次は1と1を足した2、、、というように、前の2つの項の和が次の項の値になる数列がフィボナッチ数列と呼ばれています。
0、1、1、2、3、5、8、、、
こんな感じで永遠と続きます。
フィボナッチ数列のような単純な漸化式で定義される数列はプログラムでは簡単に求めることができます。
いくつか書き方はあると思いますが、解答例で使用しているwhile
文と、もう1つfor
文を使って求めてみます。
while
文を使ってフィボナッチ数列を求める
while
文は、繰り返す回数が事前に分からない場合によく使われます。
今回の問題がまさにそれで、「1000未満」のフィボナッチ数列を求めたいけど、いくつかあるのか分からない、そんな時はwhile
文が適しています。
while
文を使って10000未満のフィボナッチ数列を求めてみます。
# 始まりの2項は0、1と決まっているので、リストに予め格納しておきます。
fibonacci = [0, 1]
# 新しく求める項を保持する変数
value = 0
# 新しく求める項の位置を保持するする変数(最初は3番目の項を求めるので2を入れておきます。)
n = 2
# 本来は「while」の後にループを続ける条件を書きますが、
# 処理した後でループを抜けるか判定させたいため、
# 「True」としています。
# この場合、break文が必須です。
while True:
value = fibonacci[n-2] + fibonacci[n-1]
if value >= 10000:
break
fibonacci.append(value)
n += 1
print('10000未満のフィボナッチ数列 : ',fibonacci)
上記の実行結果
10000未満のフィボナッチ数列 : [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
for
文を使ってフィボナッチ数列を求める
次はfor
文です。
for
文は繰り返す回数が事前に決まっている場合に使用されることが多いです。
フィボナッチ数列の最初の10個(先頭の0、1を含む)の値をfor
文を使って求めてみます。
# 始まりの2項は0、1と決まっているので、リストに予め格納しておきます。
fibonacci = [0, 1]
for i in range(2,10):
# range(2,10)とすると i には2〜9が順番に入ります
fibonacci.append(fibonacci[i-2] + fibonacci[i-1])
print('フィボナッチ数列の先頭10個 : ',fibonacci)
上記の実行結果
フィボナッチ数列の先頭10個 : [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
偶数の場合、加算する
偶数の判定は問題集No.1でも取り扱いました。

2で割った余りが0であれば偶数と判定します。
Colab
解答例や解説のコードは Google Colaboratory で確認しています。
環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。
おわりに
今回の問題は LINE のオープンチャットに投稿されたものです。
今後も具体的な問題・課題の解説記事を増やしていきたいと思っています。
解説して欲しい問題・課題がありましたら、お問い合わせフォームからご連絡ください。
以上です。
コメント