Saltar al contenido

Secuencia de conjeturas de Collatz

Solución:

Olvidaste agregar el x valores a la seq lista:

def collatz_sequence(x):
    seq = [x]
    if x < 1:
       return []
    while x > 1:
       if x % 2 == 0:
         x = x / 2
       else:
         x = 3 * x + 1 
       seq.append(x)    # Added line
    return seq

Verificación:

~/tmp$ python collatz.py 
[6, 3, 10, 5, 16, 8, 4, 2, 1]

def collatz_sequence(x):
    seq = [x]
    while seq[-1] > 1:
       if x % 2 == 0:
         seq.append(x/2)
       else:
         seq.append(3*x+1)
       x = seq[-1]
    return seq

Aquí hay un código que produce lo que está buscando. El cheque para 1 está integrado en la instrucción while, y se agrega iterativamente a la lista seq.

>>> collatz_sequence(6)
[6, 3, 10, 5, 16, 8, 4, 2, 1]

Tenga en cuenta que esto va a ser muy lento para grandes listas de números. Un caché no resolverá el problema de la velocidad, y no podrá usar esto en una solución de fuerza bruta del problema del proyecto euler, tomará una eternidad (como lo hace con cada cálculo, cada iteración).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *