有人可以解释这样的代码看起来如何以及为什么起作用吗?

时间:2019-05-12 00:52:21

标签: python-3.x

我正在udemy上进行此项目,我已将我的代码与解决方案进行了比较,但它们根本不匹配。有人可以告诉我解决此问题的最有效的代码行是什么(collat​​z_conjecture)吗?

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))

1 个答案:

答案 0 :(得分:2)

您的代码正在执行的操作是,如果数字大于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