import time
import numpy as np
import gc
def fib_stack1(n):
""" Original function """
assert type(n) is int, 'Expected an integer as input.'
if n < 2:
return n
else:
stack = [0, 1]
for i in range(n-1):
stack.append(stack[-1] + stack[-2])
return stack[-1]
def fib_stack2(n):
""" Modified function """
assert type(n) is int, 'Expected an integer as input.'
if n < 2:
return n
else:
stack = [0, 1]
for i in range(n-1):
stack.append(stack[-1] + stack[-2])
### CHANGE ###
stack.pop(-3)
##############
return stack[-1]
rec1 = []
rec2 = []
rec3 = []
rec4 = []
for _ in range(5):
t1 = time.time()
fib_stack1(99999)
t2 = time.time()
rec1.append(t2-t1)
t1 = time.time()
fib_stack2(99999)
t2 = time.time()
rec2.append(t2-t1)
gc.disable()
t1 = time.time()
fib_stack1(99999)
t2 = time.time()
rec3.append(t2-t1)
t1 = time.time()
fib_stack2(99999)
t2 = time.time()
rec4.append(t2-t1)
gc.enable()
print(np.array(rec1).mean())
print(np.array(rec2).mean())
print(np.array(rec3).mean())
print(np.array(rec4).mean())
aW1wb3J0IHRpbWUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBnYwoKZGVmIGZpYl9zdGFjazEobik6CiAgICAiIiIgT3JpZ2luYWwgZnVuY3Rpb24gIiIiCiAgICBhc3NlcnQgdHlwZShuKSBpcyBpbnQsICdFeHBlY3RlZCBhbiBpbnRlZ2VyIGFzIGlucHV0LicKICAgIGlmIG4gPCAyOgogICAgICAgIHJldHVybiBuCiAgICBlbHNlOgogICAgICAgIHN0YWNrID0gWzAsIDFdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi0xKToKICAgICAgICAgICAgc3RhY2suYXBwZW5kKHN0YWNrWy0xXSArIHN0YWNrWy0yXSkKICAgICAgICByZXR1cm4gc3RhY2tbLTFdCgpkZWYgZmliX3N0YWNrMihuKToKICAgICIiIiBNb2RpZmllZCBmdW5jdGlvbiAiIiIKICAgIGFzc2VydCB0eXBlKG4pIGlzIGludCwgJ0V4cGVjdGVkIGFuIGludGVnZXIgYXMgaW5wdXQuJwogICAgaWYgbiA8IDI6CiAgICAgICAgcmV0dXJuIG4KICAgIGVsc2U6CiAgICAgICAgc3RhY2sgPSBbMCwgMV0KICAgICAgICBmb3IgaSBpbiByYW5nZShuLTEpOgogICAgICAgICAgICBzdGFjay5hcHBlbmQoc3RhY2tbLTFdICsgc3RhY2tbLTJdKQogICAgICAgICAgICAjIyMgQ0hBTkdFICMjIwogICAgICAgICAgICBzdGFjay5wb3AoLTMpCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjCiAgICAgICAgcmV0dXJuIHN0YWNrWy0xXSAKCgpyZWMxID0gW10KcmVjMiA9IFtdCnJlYzMgPSBbXQpyZWM0ID0gW10KZm9yIF8gaW4gcmFuZ2UoNSk6CiAgICB0MSA9IHRpbWUudGltZSgpCiAgICBmaWJfc3RhY2sxKDk5OTk5KSAgCiAgICB0MiA9IHRpbWUudGltZSgpCiAgICByZWMxLmFwcGVuZCh0Mi10MSkKICAgIAogICAgdDEgPSB0aW1lLnRpbWUoKQogICAgZmliX3N0YWNrMig5OTk5OSkgIAogICAgdDIgPSB0aW1lLnRpbWUoKQogICAgcmVjMi5hcHBlbmQodDItdDEpCiAgICAKICAgIGdjLmRpc2FibGUoKQogICAgCiAgICB0MSA9IHRpbWUudGltZSgpCiAgICBmaWJfc3RhY2sxKDk5OTk5KSAgCiAgICB0MiA9IHRpbWUudGltZSgpCiAgICByZWMzLmFwcGVuZCh0Mi10MSkKICAgIAogICAgdDEgPSB0aW1lLnRpbWUoKQogICAgZmliX3N0YWNrMig5OTk5OSkgIAogICAgdDIgPSB0aW1lLnRpbWUoKQogICAgcmVjNC5hcHBlbmQodDItdDEpCiAgICAKICAgIGdjLmVuYWJsZSgpCnByaW50KG5wLmFycmF5KHJlYzEpLm1lYW4oKSkKcHJpbnQobnAuYXJyYXkocmVjMikubWVhbigpKQpwcmludChucC5hcnJheShyZWMzKS5tZWFuKCkpCnByaW50KG5wLmFycmF5KHJlYzQpLm1lYW4oKSk=