Лукас Числа Рекурсивно с изменениями - PullRequest
0 голосов
/ 05 апреля 2020

Я работаю над проблемой для моей магистерской программы и с трудом понимаю, о чем конкретно спрашивает мой профессор. Мой код работает .. Я просто не уверен, что он следует его спецификациям. Любые указания приветствуются.

Вот требования

Задача 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)
...