Вы можете хранить значения в списке (например, result
ниже):
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
Сохранение элементов в списке дает у вас есть возможность продолжить обработку этих элементов позже в коде. Вы можете распечатать их, подсчитать их, сделать больше вычислений на них и т. Д.
Однако для хранения их требуется память, поэтому, если вам не нужно сохранять их все в памяти одновременно, Ashwini Решение Чаудхари было бы лучше.
Вот такой подход, подобный Ашвини, за исключением того, что он отделяет печать от вычисления. Это всегда хорошо, поскольку часто вы хотите выполнить вычисление и не показывать результаты одновременно.
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))
см [гипотеза коллатца] (http://en.wikipedia.org/wiki/Collatz_conjecture) – msw