#!/usr/bin/python

def fib_0 (n):
    if n < 0:
        raise NegativeArgument
    elif n <= 1:
        return n
    else:
        return fib_0(n-1) + fib_0(n-2)

# The above recursion is too complex. So we use a dictionary to store
# already computed values

knownfibs = {0:0, 1:1}
def fib_1(n):
    if n < 0:
        raise NegativeArgument
    elif n in knownfibs:
        return knownfibs[n]
    else:
        res = fib_1(n-1) + fib_1(n-2)
        knownfibs[n] = res
        return res

print fib_1(50)
print fib_0(50)
