問題
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