Я работаю над проблемой для моей магистерской программы и с трудом понимаю, о чем конкретно спрашивает мой профессор. Мой код работает .. Я просто не уверен, что он следует его спецификациям. Любые указания приветствуются.
Вот требования
Задача 2b: (2 балла).
Внутри вашей задачи 1 Функция Лукаса, определите вложенную вспомогательную функцию что делает следующее:
• принимает 1 аргумент - индекс числа Лукаса для вычисления
• рекурсивно вычисляет это значение и подсчитывает количество вызовов функции, как и прежде, снова используя
параметр тайм-аута для ограничения его времени выполнения
• в случае успеха, возвращая номер Лукаса и количество вызовов функций, как и раньше.
Ваша внешняя функция Лукаса должна
• проверить предварительные условия для индекса числа Лукаса и значения времени ожидания, как и раньше, затем
вызвать вложенную вспомогательную функцию с индексом числа Лукаса
, возвращающей значение что эта вспомогательная функция возвращает
Вот код, который у меня есть до сих пор
import time
from datetime import timedelta
timesCalled = 0
import sys
maxTimeout = 2
def lucas(k):
# Error handling
if not isinstance(k, int):
raise TypeError("Sorry.{} is not an integer.".format(k))
if not k >= 0:
raise ValueError("Sorry. {} must be zero or positive.".format(k))
def inner_lucas(k): #accepts one argument - the index of the lucas number to compute
global maxTimeout
global timesCalled
timesCalled = timesCalled + 1
maxTimeout = 2
if (k == 0):
return 2
elif (k == 1):
return 1
elif(k >= 2):
return inner_lucas(k-1) + inner_lucas(k-2)
global timesCalled
start = time.time()
for i in range(k+1):
_inner_lucas = inner_lucas(i)
finish = time.time() - start
print('lucas {} is {} - computed with {} calls in {} seconds'.format(i,_inner_lucas,timesCalled,finish))
timesCalled = 0
return inner_lucas(k)
# Call the outer function.
lucas(12)