Я проверяю время выполнения на факториалах (приходится использовать пользовательскую функцию), но получаю странную ошибку. Код, с которым я работаю, выглядит следующим образом:
import numpy as np
import time
np.random.seed(14)
nums = list(np.random.randint(low=100, high=500, size=10))
# nums returns as [207, 444, 368, 427, 349, 458, 334, 256, 238, 308]
def fact(x):
if x == 1:
return 1
else:
return x * fact(x-1)
recursion_times = []
recursion_factorials = []
for i in nums:
t1 = time.perf_counter()
factorial = fact(i)
t2 = time.perf_counter()
execution = t2-t1
recursion_factorials.append(factorial)
recursion_times.append(execution)
print(execution)
Когда я запускаю вышеописанное, я получаю следующее: RuntimeWarning: overflow encountered in long_scalars"""
Но когда я запускаю его, как показано ниже, Я не получаю предупреждений.
recursion_times = []
recursion_factorials = []
for i in [207, 444, 368, 427, 349, 458, 334, 256, 238, 308]:
t1 = time.perf_counter()
factorial = fact(i)
t2 = time.perf_counter()
execution = t2-t1
recursion_factorials.append(factorial)
recursion_times.append(execution)
print(execution)
Я знаю, что вызов списка nums
требует дополнительных затрат, но почему это вызовет предупреждение во время выполнения? Я пытался копаться, но я получаю только динамически именуемые переменные потоки и библиотеки подавления предупреждений - я ищу, почему это может произойти.
Для чего я стою, я запускаю Python3 в ноутбук Юпитера. Рад ответить на любые другие вопросы, если это поможет.
Заранее спасибо за помощь!