我编写了一个代码,用于测量在Collatz猜想中返回1所需的步骤数。这是我的代码
counter = 0
def collatz(n):
global counter
counter += 1
if n <= 0 :
return "Invalid Number"
elif n == 1 :
return counter
elif n % 2 == 1 :
n = 3*n + 1
return collatz(n)
elif n % 2 == 0 :
n = n/2
return collatz(n)
print(collatz(9921615699))
print(collatz(9921615699))
我希望最后两个打印命令可以打印311和311。相反,它们可以打印311和622。我想这很容易在代码中看到问题所在。我该如何解决?如何在每次命令完成时(而不是在函数运行时)重置计数器。
最佳答案
除了使用全局变量,您还可以使计数器成为具有默认值的参数:
def collatz(n, counter=0):
counter += 1
if n <= 0 :
return "Invalid Number"
elif n == 1 :
return counter
elif n % 2 == 1 :
n = 3*n + 1
return collatz(n, counter)
elif n % 2 == 0 :
n = n/2
return collatz(n, counter)
关于python - 在每个新的递归上重置Collatz计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36893822/