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):
print("Wrapped")
if n not in cache:
cache[n] = func(n)
print(cache[n])
return cache[n]
return inner
fib = wrapper(fib)
print(fib(5))
print(fib(13))
ZGVmIGZpYihuKToKICAgIGlmIG4gPT0gMDoKICAgICAgICByZXR1cm4gMAogICAgZWxpZiBuID09IDE6CiAgICAgICAgcmV0dXJuIDEKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGZpYihuIC0gMSkgKyBmaWIobiAtIDIpCiAKZGVmIHdyYXBwZXIoZnVuYyk6CiAgICBjYWNoZSAgPSB7fQogCiAKICAgIGRlZiBpbm5lcihuKToKICAgICAgICBwcmludCgiV3JhcHBlZCIpCiAgICAgICAgaWYgbiBub3QgaW4gY2FjaGU6CiAgICAgICAgICAgIGNhY2hlW25dID0gZnVuYyhuKQogICAgICAgIHByaW50KGNhY2hlW25dKQogICAgICAgIHJldHVybiBjYWNoZVtuXQogICAgcmV0dXJuIGlubmVyCiAKZmliID0gd3JhcHBlcihmaWIpCgpwcmludChmaWIoNSkpCgpwcmludChmaWIoMTMpKQ==