def memoize(f):
cache = {}
return lambda *args: cache[args] if args in cache else cache.update({args: f(*args)}) or cache[args]
@memoize
def fib(n):
return n if n < 2 else fib(n-2) + fib(n-1)
print(fib(500))
ZGVmIG1lbW9pemUoZik6CiAgICBjYWNoZSA9IHt9CiAgICByZXR1cm4gbGFtYmRhICphcmdzOiBjYWNoZVthcmdzXSBpZiBhcmdzIGluIGNhY2hlIGVsc2UgY2FjaGUudXBkYXRlKHthcmdzOiBmKCphcmdzKX0pIG9yIGNhY2hlW2FyZ3NdCgpAbWVtb2l6ZQpkZWYgZmliKG4pOgogICAgcmV0dXJuIG4gaWYgbiA8IDIgZWxzZSBmaWIobi0yKSArIGZpYihuLTEpCgpwcmludChmaWIoNTAwKSk=