返回语句中的Python递归计时

2024-09-19 23:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试对阶乘的递归进行计时,但我找不到在每个递归步骤中打印每个阶乘的方法。现在我试着把它打印在return语句中,这样就可以解决我的问题了,但结果只是一堆乱七八糟的文本,时间被分散了。你知道吗

编辑:我应该提到的是,我正在努力获得整个过程的累积计时,而不是像下面的print语句那样零碎的结果。你知道吗

我试过这样的方法:

return (str(n) + '! = ' + (str(FactResult)) +  
                   ' - Runtime = %.9f seconds' % (end-start))

但这是我现在所拥有的。你知道吗

import time
def factorial(n):
"""Factorial function that uses recursion and returns factorial of
number given."""
start = time.clock()
if n < 1:
    return 1
else:
    FactResult = n * factorial(n - 1)
    end = time.clock()
    print(str(n) + '! - Runtime = %.9f seconds' % (end-start))
    return FactResult

Tags: 方法returntime步骤语句startruntimeend
2条回答

在修复压痕和轻微(外观)变化后,它似乎可以正常工作:

import time

def factorial(n):
    """Factorial function that uses recursion and returns factorial of number given."""

    start = time.clock()
    if n < 1:
        return 1
    else:
        FactResult = n * factorial(n - 1)
        end = time.clock()
        print(str(n) + '! =', FactResult, '- Runtime = %.9f seconds' % (end-start))
        return FactResult

factorial(10)

它为我打印。。。不打印结果值:

c:\tmp\___python\BobDunakey\so12828669>py a.py
1! - Runtime = 0.000001440 seconds
2! - Runtime = 0.000288474 seconds
3! - Runtime = 0.000484790 seconds
4! - Runtime = 0.000690225 seconds
5! - Runtime = 0.000895181 seconds
6! - Runtime = 0.001097736 seconds
7! - Runtime = 0.001294052 seconds
8! - Runtime = 0.001487008 seconds
9! - Runtime = 0.001683804 seconds
10! - Runtime = 0.001884920 seconds

。。。通过打印值:

c:\tmp\___python\BobDunakey\so12828669>py a.py
1! = 1 - Runtime = 0.000001440 seconds
2! = 2 - Runtime = 0.001313252 seconds
3! = 6 - Runtime = 0.002450827 seconds
4! = 24 - Runtime = 0.003409847 seconds
5! = 120 - Runtime = 0.004300708 seconds
6! = 720 - Runtime = 0.005694598 seconds
7! = 5040 - Runtime = 0.006678577 seconds
8! = 40320 - Runtime = 0.007579038 seconds
9! = 362880 - Runtime = 0.008463659 seconds
10! = 3628800 - Runtime = 0.009994826 seconds

编辑

对于累计计时,您必须在通话之外进行测量。否则您将无法捕获开始时间。更自然的是:

import time

def factorial(n):
    """Factorial function that uses recursion and returns factorial of number given."""

    if n < 1:
        return 1
    else:
        return n * factorial(n - 1)


n = 10

start = time.clock()
result = factorial(n)
end = time.clock()

print(str(n) + '! =', result, '- Runtime = %.9f seconds' % (end-start))

它打印:

c:\tmp\___python\BobDunakey\so12828669>py a.py
10! = 3628800 - Runtime = 0.000007200 seconds

移动“结束=时钟()”和捕捉n<;1的块中“return 1”前面的print语句。这是递归堆栈最大深度的最后一次执行,因此您将错过的只是备份。为了得到最正确的结果,应该遵循NullUserException的建议,并在递归方法之外使用time。你知道吗

相关问题 更多 >