updated from Atlas
This commit is contained in:
60
attic/decorators/fibonacci.py
Normal file
60
attic/decorators/fibonacci.py
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
# source: http://oeis.org/A000045
|
||||
fibo_seq = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
|
||||
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025,
|
||||
121393, 196418, 317811, 514229, 832040, 1346269, 2178309,
|
||||
3524578, 5702887, 9227465, 14930352, 24157817, 39088169]
|
||||
|
||||
from functools import lru_cache
|
||||
|
||||
def fibonacci(n):
|
||||
if n < 2:
|
||||
return n
|
||||
return fibonacci(n-2) + fibonacci(n-1)
|
||||
|
||||
@lru_cache()
|
||||
def fibonacci2(n):
|
||||
if n < 2:
|
||||
return n
|
||||
return fibonacci2(n-2) + fibonacci2(n-1)
|
||||
|
||||
def memoize(func):
|
||||
'''simplest memoizing decorator'''
|
||||
cache = {}
|
||||
def memoized(*args):
|
||||
if args not in cache:
|
||||
cache[args] = func(*args)
|
||||
return cache[args]
|
||||
return memoized
|
||||
|
||||
def test():
|
||||
for i, expected in enumerate(fibo_seq[:31]):
|
||||
print(i, expected)
|
||||
assert fibonacci(i) == expected
|
||||
|
||||
def chronograph():
|
||||
global fibonacci
|
||||
from time import time
|
||||
t0 = time()
|
||||
n = 32
|
||||
res = fibonacci(n)
|
||||
#res = [fibonacci(n) for n in range(30)]
|
||||
t1 = time()
|
||||
print(n, res, format(t1-t0, '0.6f'))
|
||||
|
||||
t0 = time()
|
||||
res = fibonacci2(n)
|
||||
#res = [fibonacci2(n) for n in range(30)]
|
||||
t1 = time()
|
||||
print(n, res, format(t1-t0, '0.6f'))
|
||||
|
||||
t0 = time()
|
||||
fibonacci = memoize(fibonacci)
|
||||
res = fibonacci(n)
|
||||
#res = [fibonacci2(n) for n in range(30)]
|
||||
t1 = time()
|
||||
print(n, res, format(t1-t0, '0.6f'))
|
||||
|
||||
if __name__=='__main__':
|
||||
#test()
|
||||
chronograph()
|
||||
Reference in New Issue
Block a user