在每个新的递归上重置Collatz计数器

安维特

我编写了一个代码,用于测量在Collat​​z猜想中返回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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章