LoginSignup
1
2

More than 5 years have passed since last update.

Project Euler 問題2 「400万以下のと偶数のフィボナッチ数の和」

Last updated at Posted at 2018-10-28

問題

400万以下のフィボナッチ数のうち、偶数の数字の和を求めよ

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

コード(Python)


def getFibonacchi(max : int, firstNum = 1, secondNum = 2, fibonacchiNums=[1,2]): #一個目の数字と二個目の数字から三個目の数字を求める
  thirdNum = firstNum + secondNum
  if thirdNum > max:
    return fibonacchiNums
  fibonacchiNums.append(thirdNum) 
  return getFibonacchi(max, secondNum, thirdNum, fibonacchiNums)

def getSumOfEvenNumbers(numbers : list): #任意のリストから偶数を抜き出し、和を求める
  evenNums = []
  for number in numbers:
    if number % 2 == 0:
      evenNums.append(number)
  sumOfEvenNums = sum(evenNums)
  return sumOfEvenNums

fibonacchiNums = getFibonacchi(4000000)
sum = getSumOfEvenNumbers(fibonacchiNums)
print(sum)

400万以下というとすごい数のフィボナッチ数が出て来そうですが、意外と少ない!

[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, 1346269, 2178309, 3524578]

というわけで今回はストレートに再帰関数でやってみました。

ちなみに私も今回知ったのですがPythonではこんな感じに関数の引数の型を他のエンジニアさんに教えることができます(ただし強制力はない)

max : int
numbers : list
1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2