Я создаю последовательность коллатца с рекурсивной функцией ниже:
def collatz(n):
if n%2 == 0:
return int(n/2)
else:
return int((3 * n)/2)
Насколько я понимаю, рекурсивная функция — это функция, которая в основном вызывает сама себя. Ниже я попытался создать рекурсивную функцию со следующим:
def collatz(x):
if x == 1:
"Done"
print(x)
x = collatz(x)
return(x)
Где, по существу, переменная x продолжает передаваться в функцию collatz
, которую я определил, пока не достигнет 1. Однако каждый раз, когда я запускаю рекурсивную функцию, она повторно печатает 'x'
, а затем я получаю
collatz(3)
'RecursionError: maximum recursion depth exceeded in comparison'
Как я понимаю, это бесконечный цикл. Я думал, что, переназначив его на x
для результатов первого collatz()
, он вернет новое значение и будет продолжаться до тех пор, пока не достигнет '1'
, но я, похоже, не совсем понял.
Любая помощь/советы/советы были бы замечательными! Спасибо!
3n+1
, а не3n / 2
- person Adam Smith   schedule 08.10.2017collatz
всегда переходит вcollatz
.x
никогда не уменьшается. - person Chris   schedule 08.10.2017