如何让Python程序运行更快?运行出现killed 9错误如何解决
问题原因与修复方案
错误触发原理
killed 9 是Linux系统下OOM(内存溢出)杀手的强制终止信号,你的代码触发了死循环,导致内存无限上涨最终被系统主动杀死。
代码核心BUG
while循环的判断顺序存在逻辑错误:
- 所有整数必然满足
n%2==0或者n%2==1两个条件之一,你写在最后的elif n<=0分支永远不会被执行 - 循环终止条件永远触发不了,
N数组会无限追加元素,直到占满内存
修复后的可运行代码
n,m,o = 1766445895,1,1 N,M,O=[],[],[] O.append(o) M.append(m) N.append(n) go_on = True while go_on: # 先判断终止条件,放在最前面才会被执行 if n <= 0: go_on = False break if n % 2 == 0: n=(n-2)//2 N.append(n) elif n % 2 == 1: n=(n-1)//2 N.append(n) for i in range(len(N)): if N[i] % 2 == 0: o=m+o O.append(o) M.append(m) if N[i] % 2 == 1: m=o+m O.append(o) M.append(m) for i in range(len(N)): if i < 10: print('{:d}: n = {:10d}, q = {:6d}/{:6d}'.format(i, N[i],O[i],M[i])) else: print('{:d}: n = {:10d}, q = {:6d}/{:6d}'.format(i, N[i],O[i],M[i]))
另外你代码里导入了numpy但全程没有使用,可以直接删掉import语句减少不必要的加载开销。
可选优化建议
你不需要完整存储N数组所有元素,分解自然数的过程可以和分子分母计算合并,全程只需要几个变量即可完成计算,内存占用可以降到几乎为0,即使输入极大的自然数也不会出现内存问题。
内容的提问来源于stack exchange,提问作者J J
相关产品推荐
相关产品推荐

