以下是我目前拥有的代码:
def F(n):
t=time.time()
if n==0:
return (0)
elif n==1:
return (1)
else:
return (F(n-1)+F(n-2))
t1==time.time()
return t
F_time==t1-t
print ('It took',F_time,'seconds to sort',n,'values using recursion')
我正在尝试打印n个Fibonacci序列并在前后花费时间,但由于返回语句,它不会在返回后接受变量,也不会接受以下print语句。
答案 0 :(得分:1)
永远不会执行return
语句之后的任何内容。 return语句立即终止该函数并“返回”给调用者。所以这真的不可能。
虽然有两种方法可以得到(几乎)相同的结果。
执行return语句所花费的时间几乎可以忽略不计。因此,您可以在返回值上方移动必要的基准代码,并获得几乎相同的结果,就好像它在'return'语句后实际执行一样。
def F(n):
t=time.time()
if n==0:
return (0)
elif n==1:
return (1)
else:
return (F(n-1)+F(n-2))
t1==time.time()
F_time==t1-t
print ('It took',F_time,'seconds to sort',n,'values using recursion')
return t
将您的计时代码放在函数之外,这是首选方法。
def F(n):
if n==0:
return (0)
elif n==1:
return (1)
else:
return (F(n-1)+F(n-2))
return t
t=time.time()
F(5)
t1==time.time()
F_time==t1-t
print ('It took',F_time,'seconds to sort',5,'values using recursion')
希望这有所帮助,祝你好运!
答案 1 :(得分:0)
为了在函数内部return
语句之后真正执行事物,请使用try-finally
,如下所示:
# platform independent high-resolution clock
from timeit import default_timer as timer
def F(n):
t = timer()
try:
if n == 0:
return 0
elif n == 1:
return 1
else:
return (F(n - 1) + F(n - 2))
finally:
t1 = timer()
F_time = t1 - t
print(u"F(%s) took %.2fµs seconds" % (n, F_time * 1e6))
if __name__ == '__main__':
print("RESULT:", F(4))
输出:
F(1) took 0.92µs seconds
F(0) took 0.84µs seconds
F(2) took 429.78µs seconds
F(1) took 0.84µs seconds
F(3) took 520.12µs seconds
F(1) took 0.67µs seconds
F(0) took 0.75µs seconds
F(2) took 90.85µs seconds
F(4) took 700.82µs seconds
RESULT: 3
注意:在这个例子中,n>的时间> 1当然包括在嵌套递归调用中打印到stdout的时间,然后在那个简单的例子中占主导地位。