Почему в моем коде для последовательности Коллатца появляется сообщение «Превышена максимальная глубина рекурсии»?Python

Программы на Python
Anonymous
Почему в моем коде для последовательности Коллатца появляется сообщение «Превышена максимальная глубина рекурсии»?

Сообщение Anonymous »

Я только начал изучать Python из курса «Автоматизация скучных вещей» и хотел бы немного прояснить, почему этот конкретный код, который я создал для главы 4 «Последовательность Коллатца», не работает, а этот другой код работает. У меня возникли проблемы с пониманием того, как вызывается код и почему мне кажется, что для моего кода я получаю ошибку превышения максимальной глубины рекурсии. Я опубликую другой правильный код, так может ли кто-нибудь объяснить разницу между обоими кодами?
Есть ли какой-нибудь способ изменить мой код, чтобы он работал, или мне нужно делать то, что говорит другой код, где мне нужно определить функцию, а цикл while не может находиться внутри функции? Потому что мне кажется, что проблема именно в этом.
Мой код:
def collatz(number):
while number != 1:
number=collatz(number)
if number % 2 == 0:
print ((int(number))//(2),sep='')
return ((int(number))//(2))

elif number % 2 == 1:
print (3*int(number)+1,sep='')
return (3*int(number)+1)

print('Enter number:')
number=int(input('>'))
collatz(number)

Правильный код:
def collatz(number):
if number % 2 ==0: #even number
print ((int(number))//(2),sep='')
return ((int(number))//(2))

elif number % 2 ==1:#odd number
print (3*int(number)+1,sep='')
return (3*int(number)+1)

try:
print('Enter number:')
number=int(input('>')) #user input
while number !=1: #performs loop until number becomes 1
number=collatz(number) #number gets passed to collatz function until it arrives at 1

except ValueError:
print('Please enter an integer')#error message if non-integer is input

Вернуться в «Python»