0

试图弄清楚这段代码运行需要多长时间:

import timeit as t

def fib_recursive(n):

    if n==0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib_recursive(n-1) + fib_recursive(n-2)
print fib_recursive(29)
print t.Timer("fib_recursive(29)")

输出如下:

514229 timeit.Timer 实例位于 0xda28c0

4

3 回答 3

2

当你使用 IPython 时,最简单的计时方法是使用 magicfunction %timeit

%timeit fib_recursive(10)
>>> 10000 loops, best of 3: 70.2 us per loop
于 2014-02-06T04:45:04.167 回答
1

要扩展 thefourtheye 的评论(这是正确的),您通常希望将定义函数所需的步骤隔离到设置参数中timeit。鉴于您的设置,我将执行以下操作:

import timeit as t

def fib_recursive(n):
    if n==0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib_recursive(n-1) + fib_recursive(n-2)

setup = 'from __main__ import fib_recursive'
t.timeit('fib_recursive(29)', setup=setup)

我假设您了解改进此算法的各种技术,并选择测量其速度以仅建立基线。您可以尝试使用number关键字参数timeit来控制重复次数。

于 2014-02-06T04:33:24.687 回答
0

利用timeit.Timer.timeit

timer = t.Timer("fib_recursive(29)", setup='from __main__ import fib_recursive')
print timer.timeit()

或简单地使用timeit.timeit

print t.timeit("fib_recursive(29)", setup='from __main__ import fib_recursive')

注意:您需要将import语句传递给setup参数。

于 2014-02-06T04:30:21.080 回答