from time import time from sys import setrecursionlimit from functools import lru_cache setrecursionlimit(10000000) # ok && fast def solve(i): if i < 0: return children = [solve(i-1)] best = max(children) # bugged && slow def solve2(i): if i < 0: return children = [i-1] best = max(solve2(j) for j in children) lo = 8 hi = 16 t = {} for sh in range(lo, hi): b4 = time() x = 1 << sh ret = solve2(x) after = time() t[sh] = after - b4 for sh in range(lo+1, hi): print(t[sh] / t[sh-1])