我在第3行遇到错误“TypeError:'int'对象不可迭代,”它一直困扰着我。任何建议/修复都表示赞赏。
示例测试:collatz_counts(4)→3#4 - > 2 - > 1(3个步骤)
我的代码:
def collatz_counts(x):
num = 0
for i in (x):
if i == 1:
num += 1
return num
elif i % 2 == 0:
num(i) / 2
num += 1
num.append(i)
else:
num = (i*2) + 3
num += 1
num.append(i)
return num
答案 0 :(得分:2)
这可以递归解决:
def collatz_length(n):
if n == 1:
return 1
return 1 + collatz_length(3*n+1 if n%2 else n//2)
如果您打算要求一系列数字,例如,这会使自己成为备忘录,例如在Py3中
import functools as ft
@ft.lru_cache(maxsize=None)
def collatz_length(n):
if n == 1:
return 1
return 1 + collatz_length(3*n+1 if n%2 else n//2)
对于迭代解决方案,大约2.31s
与约28.6s
之间的第一百万个collatz序列将会运行。
答案 1 :(得分:0)
使用while循环。只需修改x
,直至到达1
,并在每次运行周期时跟踪steps
的数量。
def collatz_counts(x):
steps = 0
while x != 1:
if x % 2:
x = x * 3 + 1
else:
x = x // 2
steps += 1
return steps