Python实现range(5,10000)数值按规则迭代至1的循环方法
3x+1(考拉兹)序列迭代实现
你当前的代码和目标需求偏差较大,且存在变量引用错误(代码里append的sum从未定义),冗余的奇数判断也没有实际作用,按以下逻辑实现即可:
- 外层用
for循环遍历range(5,10000)的所有起始整数 - 对每个起始整数,嵌套
while循环做迭代:因为每个数迭代到1的步数不固定,用while判断当前值是否为1,不为1就持续按规则计算下一个值 - 偶数计算用整数除法
//,避免生成浮点数影响后续判断
可直接运行的参考代码:
# 存储所有迭代过程中出现的奇数、偶数 odd = [] even = [] # 存储每个起始数对应的完整迭代序列 sequence_map = {} for start in range(5, 10000): current = start current_seq = [current] # 内层循环:迭代到1就停止 while current != 1: if current % 2 == 0: even.append(current) current = current // 2 else: odd.append(current) current = 3 * current + 1 current_seq.append(current) sequence_map[start] = current_seq
代码说明:
- 以起始值5为例,生成的序列为
[5, 16, 8, 4, 2, 1],符合给定的函数规则 - 如果你不需要存储全量序列,只需要验证迭代逻辑,可以删除
sequence_map相关的代码,只保留奇偶值存储或者迭代计数逻辑即可 - 注意不要把奇偶判断放在外层循环:外层判断只能识别起始值的奇偶,迭代过程中生成的中间值不会被分类,必须放在内层的while循环里才能覆盖所有迭代产生的数值
内容的提问来源于stack exchange,提问作者David David
相关产品推荐
相关产品推荐

