In [1]:
from __future__ import division

cache = {}
def collatz(N):
    try:
        steps = cache[N]
    except:
        if N==1:
            steps = 1
        elif N%2 == 0:
            steps = 1+collatz(N/2)
        else:
            steps = 1+collatz(3*N + 1)
        cache[N] = steps
    return steps

 
max_starting = 0
for N in range(1,1000000):
    col = collatz(N)
    if col > max_starting:
        max_starting = col
        start_number = N

In [2]:
start_number


Out[2]:
837799

In [2]: