Python 递归Collatz猜想输出挑战

Python 递归Collatz猜想输出挑战,python,recursion,Python,Recursion,我有一个递归函数来计算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(ho

我有一个递归函数来计算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
变量?

您犯了一个常见错误,即递归函数
collatz\u 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

您犯了一个常见错误,即递归函数
collatz\u 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

我想我明白了。我从函数内部调用collatz函数,您的方法返回递归调用。要提供最终答案,将执行else语句,并将最终值返回到原始函数调用。谢谢,我想我明白了。我从函数内部调用collatz函数,您的方法返回递归调用。要提供最终答案,将执行else语句,并将最终值返回到原始函数调用。谢谢