如何在函数中返回后打印语句?

1 投票
2 回答
12540 浏览
提问于 2025-04-30 18:49

这是我现在的代码:

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个斐波那契数列的数字,并在开始和结束时记录时间。但是因为有返回语句,代码在返回后就不再接受变量,也无法执行后面的打印语句。

暂无标签

2 个回答

1

为了在函数内部的 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 时,时间计算当然包括了在嵌套递归调用中打印到标准输出的时间,这些时间在这个简单的例子中占据了主导。

1

return语句之后的任何代码都不会被执行。因为一旦遇到return,函数就会立刻结束,并返回到调用它的地方。所以,实际上是不可能在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')

希望这些对你有帮助,祝你好运!

撰写回答