import timeit

print("Without cache")

setup = """
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)
"""

t = timeit.timeit("fib(20)", setup, number=1000)
print("time: " + str(t))


print("With cache")

setup = """
from functools import lru_cache as cache

@cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)
"""

t = timeit.timeit("fib(20)", setup, number=1000)
print("time: " + str(t))
