import time def fannkuch(n): count = range(1, n+1) max_flips = 0 m = n-1 r = n check = 0 perm1 = range(n) perm = range(n) perm1_ins = perm1.insert perm1_pop = perm1.pop while 1: if check < 30: #print "".join(str(i+1) for i in perm1) check = check + 1 while r != 1: count[r-1] = r r = r - 1 if perm1[0] != 0 and perm1[m] != m: perm = perm1[:] flips_count = 0 k = perm[0] while k: perm[:k+1] = perm[k::-1] flips_count = flips_count + 1 k = perm[0] if flips_count > max_flips: max_flips = flips_count while r != n: perm1_ins(r, perm1_pop(0)) count[r] = count[r] - 1 if count[r] > 0: break r = r + 1 else: return max_flips DEFAULT_ARG = 9 def main(n): for i in range(2, n): t0 = time.time() print fannkuch(i) tk = time.time() print tk - t0 main(11)