Я скопировал l oop функцию, которая возвращает значение последовательности фиббоначчи по введенному индексу.
Теперь я пытаюсь написать функцию «tester ()», которая находит первый индекс этой последовательности, расчет которой взял запрограммируйте определенное количество миллисекунд, и когда я ввожу, например, 3 мс, программа вычисляет все, но на выходе показано, что программа длилась 0 мс.
def fib_loop(n):
start = int(datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]) #check system time when the function was initialize
n1, n2 = 1, 1
count = 0
if n == 1 or n == 2:
return n1
else:
while count < n-2:
nth = n1 + n2
# update values
n1 = n2
n2 = nth
count += 1
stop = int(datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]) #check system time on the end of the function
time = stop - start #compare times to get the milisecounds of function works
return time
def tester(miliseconds):
x = 0
while True:
if fib_loop(x) <= miliseconds:
x += 1
else:
return x, fib_loop(x)
print(tester(3)) #(2747, 0)
Как вы видите, когда я ввожу 3 мс в качестве параметра, функция возвращает около 3000-го индекса последовательности, но fib_l oop (x) == 0 (fib_l oop (x) возвращает, сколько времени эта функция продержалась), как это возможно, если fib_l oop (x) должен быть больше миллисекунд, чтобы перейти к возврату?
if fib_loop(x) <= miliseconds:
x += 1
else:
return x, fib_loop(x)
PS: Когда я передаю больший параметр функции tester (), например 10, он возвращает + - 7. Можете ли вы объяснить мне, почему это происходит? Заранее большое спасибо и очень извините за мой engli sh.