#python #recursion
#python #рекурсия
Вопрос:
У меня есть рекурсивная функция для вычисления collatz-гипотезы. Код выдает правильное число, он вызывает себя рекурсивно на основе счетчика. Как только счетчик исчерпан, он должен вернуть правильное число — но оно возвращается None
.
def collatz_con(x, revs):
print("start")
print(x, revs)
if (x%2 == 0) and (revs != 0):
print("even and revs =" str(revs))
holder = x//2
print(holder)
collatz_con(holder, revs - 1)
elif (revs != 0):
print("odd and revs =" str(revs))
holder = ((3*x) 1)
print(holder)
collatz_con(holder, revs -1)
else:
print("else exercised")
return x
print(collatz_con(1071, 14))
Должна ли x
переменная быть возвращена и распечатана?
Ответ №1:
Вы допустили распространенную ошибку, когда ваша рекурсивная функция collatz_con()
возвращает значение, но когда вы вызываете ее рекурсивно, вы игнорируете это возвращаемое значение. Я предполагаю, что вы хотите что-то более похожее:
def collatz_con(x, revs):
print(x, revs)
if x % 2 == 0 and revs != 0:
print("even and revs =", revs)
holder = x // 2
print(holder)
return collatz_con(holder, revs - 1)
if revs != 0:
print("odd and revs =", revs)
holder = 3 * x 1
print(holder)
return collatz_con(holder, revs - 1)
print("else exercised")
return x
Комментарии:
1. Я думаю, что понимаю. Я вызывал функцию collatz изнутри функции, ваш подход возвращает рекурсивный вызов. Для предоставления окончательного ответа выполняется оператор else, и конечное значение возвращается к исходному вызову функции. Спасибо.