擅长:python、mysql、java
<p>我取了你的代码,改变了三种方法的测试顺序,好几次。我注意到第一种测试方法的时间通常是第二种方法的两倍。在</p>
<p>我不能解释为什么,但我知道你不能用一次迭代来衡量函数的性能。你必须重复这个函数多次,然后计算平均时间。在</p>
<p>IPython提供了一个方便的“魔术方法”<a href="https://ipython.org/ipython-doc/3/interactive/magics.html#magic-timeit">timeit</a>,它可以做到:</p>
<pre><code>print('math')
%timeit math.factorial(x)
print('factorial')
%timeit factorial(x)
print('loop')
%timeit loopmethod(x)
</code></pre>
<p>输出:</p>
<blockquote>
<p>math<br/>
The slowest run took 33.62 times longer than the fastest. This could mean that an intermediate result is being cached.<br/>
1000000 loops, best of 3: 1.25 µs per loop </p>
<p>factorial<br/>
100000 loops, best of 3: 19.4 µs per loop </p>
<p>loop<br/>
100000 loops, best of 3: 7.87 µs per loop </p>
</blockquote>
<p>内置函数平均比递归函数快10倍。在</p>