这是我到目前为止所做的:
def collatz_sequence(x):
seq = [x]
if x < 1:
return []
y = x*2
while x != 1 and x != y:
if x % 2 == 0:
x = x / 2
else:
x = 3 * x - 1
seq.append(x) # Added line
return seq
x = 5
while x < 10:
print collatz_sequence(x)
x += 1
所以它停止在三个案例中的两个:它实际上工作并转到1,它不起作用并返回到自身(5 - > 14 - > 7 - > 20 - > 10 - > ; 5)。如果它基本上进入另一个循环,它不会停止,例如(9-> 26-> 13-> 35-> 104-> 52-> 26)。
如果重复序列中已有的整数,如何在每个循环结束时检查序列并停止? (我想我可以摆脱执行此操作的while语句的x!= y部分。)
答案 0 :(得分:0)
您可以使用if x in seq:
操作。
def collatz_sequence(x):
seq = [x]
if x < 1:
return []
y = x*2
while x != 1 and x != y:
if x % 2 == 0:
x = x / 2
else:
x = 3 * x - 1
if x in seq:
seq.append(x) # Add at end of list so you can see the loop in output
break
seq.append(x) # Added line
return seq
x = 5
while x < 20:
print collatz_sequence(x)
x += 1
当您测试x是否在序列中时,需要稍加注意,以确保在添加项目之前进行测试。
我不确定y
变量的功能是什么。