有人能解释一下这样的代码是什么样子的以及为什么它能工作吗?

2024-05-15 14:49:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在udemy上做这个项目,我已经将我的代码与解决方案进行了比较,但是它们根本不匹配。有人能告诉我这个问题最有效的代码行是什么样的吗(collatz\u猜想)?你知道吗

def collatz(n):
    if n > 1 and n %2 == 0:
        return (n/2)
    elif n > 1 and n %2 != 0:
        return (n*3+1)


print(collatz(3))

Tags: and项目代码returnifdef解决方案print
1条回答
网友
1楼 · 发布于 2024-05-15 14:49:10

您的代码所做的是,如果数字大于1且为偶数,则在将其除以2后返回该数字;否则,如果数字大于1且为奇数,则将该数字乘以3,再将1相加并返回。你知道吗

对于3,答案是10,因为3是奇数,3*3+1=10。对于4,答案是2,因为4是偶数,4/2=2

同样从wiki定义和您的问题来看,似乎您想要验证collatz conjecture,对于任何正整数,您需要递归最终达到1,可以这样做。注意整数除法n//2,以确保为每个递归调用传递整数

def collatz(n):
    #If n reaches 1 return it
    if n == 1:
        return 1

    #Based on n being even or odd, call the function recursively
    if n %2 == 0:
        return collatz(n//2)
    else:
        return collatz(n*3+1)

print(collatz(3))
#1
print(collatz(33))
#1

相关问题 更多 >