#!/usr/bin/python3 __author__ = "bt3" from functools import wraps from do_benchmark import benchmark def memo(func): ''' an example of dynamic programming using a memoizing decorator ''' cache = {} @wraps(func) def wrap(*args): if args not in cache: cache[args] = func(*args) return cache[args] return wrap @memo def find_fibonacci_seq_rec(n): ''' implements the nth fibonacci value in a recursive exponential runtime ''' if n < 2: return n return find_fibonacci_seq_rec(n - 1) + find_fibonacci_seq_rec(n - 2) def test_memo(): n = 50 # find_fibonacci_seq_rec = memo(find_fibonacci_seq_rec) # @benchmark print(find_fibonacci_seq_rec(n)) if __name__ == '__main__': test_memo()