Skip to main content
 首页 » 编程设计

python之在每次新递归时重置 Collatz 计数器

2025年05月04日28yjmyzz

我编写了一个代码来测量在 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)