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)