Project Euler Problem 14

def next_number(n):
    if n % 2 == 0:
        return n // 2
    else:
        return n * 3 + 1

def collatz_len(n):
    if n in collatz_dic:
        return collatz_dic[n]
    elif n == 1:
        return 1
    else:
        ret = 1 + collatz_len(next_number(n))
        collatz_dic[n] = ret
        return ret


collatz_dic = {}
max_len = 0
for i in range(1, 1000000):
    len = collatz_len(i)
    if len > max_len:
        max_len = len
        max_num = i
print(max_num)