Рекурсивный сбор данных-задача вывода гипотезы

#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, и конечное значение возвращается к исходному вызову функции. Спасибо.