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))
aW1wb3J0IHRpbWVpdAoKcHJpbnQoIldpdGhvdXQgY2FjaGUiKQoKc2V0dXAgPSAiIiIKZGVmIGZpYihuKToKICAgIGlmIG4gPCAyOgogICAgICAgIHJldHVybiBuCiAgICByZXR1cm4gZmliKG4tMSkgKyBmaWIobi0yKQoiIiIKCnQgPSB0aW1laXQudGltZWl0KCJmaWIoMjApIiwgc2V0dXAsIG51bWJlcj0xMDAwKQpwcmludCgidGltZTogIiArIHN0cih0KSkKCgpwcmludCgiV2l0aCBjYWNoZSIpCgpzZXR1cCA9ICIiIgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgbHJ1X2NhY2hlIGFzIGNhY2hlCgpAY2FjaGUobWF4c2l6ZT1Ob25lKQpkZWYgZmliKG4pOgogICAgaWYgbiA8IDI6CiAgICAgICAgcmV0dXJuIG4KICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpCiIiIgoKdCA9IHRpbWVpdC50aW1laXQoImZpYigyMCkiLCBzZXR1cCwgbnVtYmVyPTEwMDApCnByaW50KCJ0aW1lOiAiICsgc3RyKHQpKQo=