我正在udemy上进行此项目,我已将我的代码与解决方案进行了比较,但它们根本不匹配。有人可以告诉我解决此问题的最有效的代码行是什么(collatz_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))
答案 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