def Fibonachi(n): if n == 1: return 1 if n == 2: return 1 if n > 2: return Fibonachi(n - 2) + Fibonachi(n - 1) def productFib(prod): answer = [] for n in range(1, 50): if prod == Fibonachi(n) * Fibonachi(n+1): return [Fibonachi(n), Fibonachi(n+1), True] break if prod != Fibonachi(n) * Fibonachi(n+1) and ((Fibonachi(n) * Fibonachi(n+1)) < prod) : answer.append(Fibonachi(n+1)) answer.append(Fibonachi(n+2)) continue return [answer[-2], answer[-1], False]
Задача с кодварса 5 кю . https://www.codewars.com/kata/5541f58a944b85ce6d00006a
Набросал такой код, тесты проходит но как я понял выходит из строя на тестах с большими числами(Execution Timed Out (12000 ms)). Так что нужна оптимизация.
Кому лень читать с сайта, тогда условия задачи вкратце
на вход дается число, если это число равняется какому то n фибоначи * n+1 фибоначи нужно вывести
n фибоначи, n+1 фибоначи, True
в противном случае алгоритм такой:
productFib(800) # should return (34, 55, false),
# since F(8) = 21, F(9) = 34, F(10) = 55 and 21 * 34 < 800 < 34 * 55
Прошу помочь c для оптимизацией
Еще есть такой вариант кода
def Fibonachi(n): if n == 1: return 1 if n == 2: return 1 if n > 2: return Fibonachi(n - 2) + Fibonachi(n - 1) def productFib(prod): answer = [] n = 1 while Fibonachi(n) * Fibonachi(n+1) < prod: n += 1 if prod == Fibonachi(n) * Fibonachi(n + 1): return [Fibonachi(n), Fibonachi(n + 1), True] break if Fibonachi(n) * Fibonachi(n+1) > prod: return [Fibonachi(n), Fibonachi(n+1), False]