Код: Выделить всё
The algorithm for computing the function F(n), where n is a natural number, is given by the following relations:
F(n) = n if n ≥ 10,000,
F(n) = n/4 + F(n / 4 + 2) if n < 10 000 and n is divisible by 4,
F(n) = 1 + F(n + 2) , if n < 10 000 and n is not divisible by 4.
What is the value of the expression F(174) - F(3)?
Он рекомендовал нам использовать lru_cache для кэширования и ускорения рекурсии, но это кэширование не помогает. не работает на настольном компьютере, только в онлайн-интерпретаторах Python
Мой код:
Код: Выделить всё
import sys
from functools import lru_cache
sys.setrecursionlimit(10**6)
@lru_cache(None)
def F(n):
if n >= 10000:
return n
elif n % 4 == 0:
return n // 4 + F(n // 4 + 2)
else:
return 1 + F(n + 2)
print(F(174) - F(3))
Программа работает в VScode, выходной ответ пуст

OnlineGDB:
Программа запускается в OnlineGDB, отображается правильный ответ
Если я закомментирую строки с кешем, то все будет работать и без него . Беда в том, что подобные задачи мы уже решали, и была такая же ситуация - без кеширования не обойтись, а оно работает только в онлайн-переводчиках
Самое смешное, что эти задания предназначены для экзамена, где доступа к онлайн-переводчику, естественно, не будет.
Программа должна выдавать ответ 67 как на ПК, так и в онлайн-переводчиках, но это происходит только в последнем случае. Возможно, нет смысла использовать кеширование в этой задаче, но я не могу понять, почему оно отказывается работать
Подробнее здесь: https://stackoverflow.com/questions/783 ... python-int