# not recursive soln. # lengths = {} # def size(n): # count = 0 # while n > 1: # if n in lengths: # return count + lengths[n] # count += 1 # # if n % 2 == 0: # n = n/2 # else: # n = 3*n + 1 # return count # simple cache def cache(func): results = {} def f(arg): if arg not in results: results[arg] = func(arg) return results[arg] return f # what is py max recursion depth? @cache def r_size(n): if n <= 1: return 1 elif n % 2 == 0: return 1 + r_size(n/2) else: return 1 + r_size(3*n + 1) def seqTo(num): for n in range(num): s = r_size(n) yield s, n # print r_size(13) if __name__ == '__main__': print max(seqTo(1000000))