在python中重复的递归值 def序列(n): 而n=1: 打印(n) 如果n%2==0: 顺序(n/2) 其他: 顺序(n*3+1) 顺序(53)

在python中重复的递归值 def序列(n): 而n=1: 打印(n) 如果n%2==0: 顺序(n/2) 其他: 顺序(n*3+1) 顺序(53),python,recursion,Python,Recursion,此循环未终止。我不明白为什么。删除while循环。您不需要这样做,因为递归函数正在完成它的工作 以下是您的代码的更正版本: def sequence(n): print(n) if n == 1: return elif n%2==0: sequence(n//2) else: sequence(n*3+1) sequence(53) 将

此循环未终止。我不明白为什么。

删除while循环。您不需要这样做,因为递归函数正在完成它的工作

以下是您的代码的更正版本:

def sequence(n):
        print(n)
        
        if n == 1:
            return
        elif n%2==0:
            sequence(n//2)
        else:
            sequence(n*3+1)


sequence(53)

n/2
更改为
n//2
,使其不会成为浮点。

序列将在2,2,2,2,2结束。。。因为无论一开始
n
等于什么,它都会下降到
2
,然后:

n = 2

2 / 2 = 1     # sequence(1)
1 * 3 + 1 = 4 # sequence(4)
4 / 2 = 2     # sequence(2)
2 / 2 = 1     # sequence(1)
1 * 3 + 1 = 4 # sequence(4)
4 / 2 = 2     # sequence(2)
...           # ....

您永远不会在函数内部更改
n
,因此
while
循环永远不会终止。也许你的意思是如果n!=1:?您不需要一个
while
循环和递归。