Vous pouvez stocker les valeurs dans une liste, (comme result
ci-dessous):
n = 1000000
result = []
for x in range(1, 3000001):
if n % 2 == 0:
x = n/2
else:
x = 3 * n + 1
n = x
result.append(n)
if n == 1:
break
print(result)
# [500000, 250000, 125000,... 8, 4, 2, 1]
print(len(result))
# 152
Stocker les éléments dans une liste donner Vous avez la possibilité de traiter ces éléments ultérieurement dans le code. Vous pouvez les imprimer, les compter, faire plus de calcul dessus, etc.
Cependant, il faut de la mémoire pour les stocker tous, donc si vous n'avez pas besoin de les conserver tous en mémoire en même temps, Ashwini La solution de Chaudhary serait meilleure.
Voici une approche similaire à celle d'Ashwini, sauf qu'elle sépare l'impression du calcul. C'est toujours une bonne chose car souvent on souhaite effectuer un calcul et ne pas afficher les résultats en même temps.
n = 1000001
def myseq(n):
for x in range(1, 3000001):
if n % 2 == 0:
x = n/2
else:
x = 3 * n + 1
n = x
yield n
if n == 1:
return
for n, item in enumerate(myseq(n), 1):
print(n, end=' ')
# 500000 250000 125000... 8 4 2 1
print('\n{}'.format(n))
se référer [Collatz Conjecture] (http://en.wikipedia.org/wiki/Collatz_conjecture) – msw