Ваш l oop повторяется только после того, как n
достигнет 1, потому что ваша функция вызывает себя рекурсивно, в строке, которую я отметил ниже:
def collatz(n):
while n != 1.0:
if n%2 == 0:
n = n/2
else:
n = 3*n+1
print(n)
# recursive call here
collatz(n)
Поскольку ваша функция вызывает себя рекурсивно, затем, когда n
достигает 1, while
l oop завершается, но это только означает, что текущий рекурсивный вызов возвращается, а затем тот, который находится ниже его в стеке, возобновляется, выполняя дополнительную печать.
Чтобы исправить проблема, вы должны использовать только while
l oop или просто рекурсию, а не оба.