在python中输出一次

时间:2018-06-24 23:30:28

标签: python python-3.x

我正在尝试使程序输出完成fib(n)所花费的时间,但是在计算期间,它会持续发布少量时间。我如何使程序仅输出一次时间。这里是我的程序:

import time

def fib(n):
    if n <= 1:
        return 1
    else:
        start_time = time.time()
        answer = fib(n-1) + fib(n-2)
        end_time = time.time()
        total_time = end_time - start_time
        print(total_time)
        return answer

4 个答案:

答案 0 :(得分:2)

由于您的函数是递归的,因此每次调用都会打印出自己的时间。如果您想知道函数花费了多少时间,我建议在时间语句中将对fib的主调用包装起来,而不是在实际的函数代码中放置时间。

答案 1 :(得分:1)

与其将用于计算时间的代码放置在fib()函数中,不如将其放置在函数外部,如下所示:

import time

def fib(n):
    if n <= 1:
        return 1
    else:
        answer = fib(n-1) + fib(n-2)
        return answer

#Place it all here

start_time = time.time()
fib(90) #Or some other number
end_time = time.time()
total_time = end_time - start_time

print(total_time)

答案 2 :(得分:1)

您使用我编写的计时程序。

#!python3

import timeit
from os import system
system('cls')
# %   %   %   %   %   %   %   %   %   %   %   %   %   %   %   %   %

# times the code 100 times
runs = 100
totalTime = 0.0; average = 0.0
testTimes = []

for i in range(runs):
    startTimer = timeit.default_timer()
    # %   %   %   %   %   %   %   %   %   %   %   %   %   %   %   %
    # >>>>> code to be tested goes here <<<<<
    def fib(n):
        if n <= 1:
            return 1
        else:
            answer = fib(n - 1) + fib(n - 2)
            return answer

    r = fib(26)
    print('fib result is:', r)
    # %   %   %   %   %   %   %   %   %   %   %   %   %   %   %   %
    endTimer = timeit.default_timer()

    timeInterval = endTimer - startTimer
    testTimes.append(timeInterval)
    totalTime += timeInterval
    print('\n', '{} {:.4f} {}'.format("This run's time is", timeInterval,
    'seconds' + '\n'))

# print the results
print('{} {:.4f} {}'.format('   Total time:', totalTime, 'seconds'))
print('{} {:.4f} {}'.format('Shortest time:', min(testTimes), 'seconds'))
print('{} {:.4f} {}'.format(' Longest time:', max(testTimes), 'seconds'))
print('{} {:.4f} {}'.format(' Average time:', (totalTime / runs), 'seconds'))

答案 3 :(得分:1)

如其他人所述,要为递归函数计时,请将计时放在函数调用的周围,而不要放在函数中。这是一些额外的代码,用于时间计算序列的前30个数字。

import time
import numpy as np

def fib(n):

    if n <= 1:
        answer = 1

    else: 
        answer = fib(n-1) + fib(n-2)

    return answer

for i in np.arange(1,30):

    start = time.time()
    f = fib(i)
    end = time.time()
    total = end - start

    print(i, fib(i), total)