擅长:python、mysql、java
<p>你做了很多相同的计算。为了避免这种情况,我们可以存储以下值:</p>
<pre><code>cache = {1 : 1}
def cycle_length(n):
if n in cache.keys():
return cache[n]
elif n % 2 == 0:
x = cycle_length(n//2) + 1
else:
x = cycle_length(3*n + 1) + 1
cache[n] = x
return x
def max_length(i,j):
mxl = cycle_length(i)
mxn = i
while i <= j:
y = cycle_length(i)
if y > mxl:
mxl = y
mxn = i
i += 1
return (mxn,mxl)
print(max_length(1, 10**6))
</code></pre>
<p>在我的机器上,你的代码运行了29.9秒。我的代码给出了相同的结果,并在1.8秒内运行。在</p>
<hr/>
<p>编辑:我写了一个脚本来比较3个答案的效率。在</p>
^{pr2}$
<p>结果:</p>
<pre><code>(837799, 525)
1.5899293422698975
(837799, 525)
4.623902320861816
(837799, 525)
4.403488874435425
</code></pre>
<p>我认为这是一个比较简单的答案(我认为这是一个比较简单的答案)。在</p>