Переменная не сохраняется между вызовами функций. Если вы хотите, чтобы между функциями передавалось несколько значений, передайте их в качестве параметра и возвращайте оба.
def collatz(n, iterations):
list_terminate = [0, 1, 2, 4]
if n in list_terminate:
return (n, iterations)
else:
if n % 2 == 0:
print(n)
iterations += 1
return collatz(n // 2, iterations)
if n % 2 == 1:
iterations += 1
print(n)
return collatz((n * 3) + 1, iterations)
Если вам не нравится вызывать вашу функцию, например, collatz(n, 0)
, тогда используйте это функция-обертка.
def collatz_helper(n, iterations):
list_terminate = [0, 1, 2, 4]
if n in list_terminate:
return (n, iterations)
else:
if n % 2 == 0:
print(n)
iterations += 1
return collatz(n // 2, iterations)
if n % 2 == 1:
iterations += 1
print(n)
return collatz((n * 3) + 1, iterations)
def collatz(n):
return collatz_helper(n, 0)