def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)
        
def wrapper(func):
    cache  = {}
    

    def inner(n):
        if n not in cache:
            cache[n] = func(n)
        return cache[n]
    return inner
    
fib = wrapper(fib)

n = 10000
for i in range(n):
    res = fib(i)

print(res)