擅长:python、mysql、java
<p>最简单的方法是记住<code>cycle_length</code>的值。如果您确实在使用Python3(3.3+),您可以用<code>lru_cache(maxsize=None)</code>来装饰函数<code>cycle_length</code>;这个程序在我的笔记本电脑上运行时间为5秒:</p>
<pre><code>from functools import lru_cache
@lru_cache(maxsize=None)
def cycle_length(n):
if n == 1:
return n
elif n % 2 == 0:
return cycle_length(n//2) + 1
else:
return cycle_length(3*n + 1) + 1
def max_length(i,j):
mxl = cycle_length(i)
mxn = i
while i <= j:
start = time.time()
y = cycle_length(i)
if y > mxl:
mxl = y
mxn = i
i += 1
return (mxn,mxl)
print(max_length(1, 10**6))
</code></pre>