这是因为您
sqrt每次都要重新计算。此修改的运行速度与递归版本一样快:
def factor_it2(n): r = [] i = 2 lim = int(math.sqrt(n)+1) while i < lim: while not n % i: r.append(i) n //= i lim = int(math.sqrt(n)+1) i += 1 if n > 1: r.append(n) return r
timeit给我这些时间:
factor 0.13133816363922143factor_it 0.5705408816539869factor_it2 0.14267319543853973
我认为剩下的微小差异是由于
for … in range(…)比等效
while循环更快,因为该
for循环可以使用生成器,而不必执行大量比较。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)