Guest User

Untitled

a guest
Jul 21st, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.55 KB | None | 0 0
  1. import sys
  2. import timeit
  3. from functools import lru_cache
  4.  
  5. index = {0: 0, 1: 1, 2: 1}
  6.  
  7.  
  8. def routine(i: int):
  9. try:
  10. return index[i]
  11. except KeyError:
  12. fib_i = fibonacci(i)
  13. index[i] = fib_i
  14. return fib_i
  15.  
  16.  
  17. @lru_cache(maxsize=None)
  18. def fibonacci(n: int) -> int:
  19.  
  20. if n in index:
  21. return index[n]
  22.  
  23. k = int(n / 2)
  24.  
  25. return routine(k + 1) * routine(n - k) + routine(k) * routine(n - k - 1)
  26.  
  27.  
  28. sys.setrecursionlimit(100)
  29. print(timeit.timeit('fibonacci(1000000)', setup="from __main__ import fibonacci", number=1000))
Add Comment
Please, Sign In to add comment