Project Euler - Problem 2

원래 소스는 앞의 두 항을 받아서 400만 미만의 값들을 더하는 형태였는데, 문제의 답을 구하는 데에는 충분했지만 문제에서 주어진 것이 아닌 다른 질의를 하려면 굉장히 귀찮아지는 단점이 있었다. 때문에 두 수를 받아서 범위 내에 있는 피보나치 수열의 짝수 항을 더하도록 다시 만들었다.

def sum_even_fib(minimum, maximum, a=0, b=1):
    '''
    This recursion function is to find the sum of all even-valued terms in 
    the Fibonacci sequence which is more than minimum and do not exceed
    maximum.

    >>> sum_even_fib(1, 4000000)
    4613732

    >>> sum_even_fib(1, 1000)
    798

    >>> sum_even_fib(123, 456)
    144

    '''
    c = a + b
    if c > maximum:
        return 0
    if c >= minimum and c % 2 == 0:
        return c + sum_even_fib(minimum, maximum, b, c)
    else:
        return sum_even_fib(minimum, maximum, b, c)

if __name__ == "__main__":
    print sum_even_fib(1, 4000000)

Python의 doctest 모듈도 한번 써봤다.

0 notes