Как исправить программу на Python, которая компилируется, но не выводит ответа при вызове функции f(2024). Вот сам код программы: ```python def f(n): if n == 1: return 1 if n > 1: return n * f(n - 1) print((f(2024) + f(2023)) / f(2022)) ```
Результат кода для рекурсии не отображается в ответе на 16-е задание ЕГЭ, потому что выполнение кода из каждого вопроса или задания находится в отдельной среде, где не выводится результат выполнения функций. Чтобы исправить программу на Python, чтобы она выводила ответ при вызове функции `f(2024)`, необходимо просто добавить команду `print` для вывода значения функции на экран: ```python def f(n): if n == 1: return 1 if n > 1: return n * f(n - 1) print((f(2024) + f(2023)) / f(2022)) ``` После этого запуск программы должен вывести результат на экран.
программа компилируется, но не выдаёт ответа.
Ну почему же не выводит, выводит, но вначале падает, все таки это самый медленный ЯП из популярных.
def f(n): print(f"Entering f({n})") if n == 1: print(f"Returning 1 for f({n})") return 1 if n > 1: result = n * f(n - 1) print(f"Returning {result} for f({n})") return result print((f(2024) + f(2023)) / f(2022))
console:
# python f.py Entering f(2024) ... Entering f(1037) Entering f(1036) Entering f(1035) Entering f(1034) Entering f(1033) Entering f(1032) Entering f(1031) Entering f(1030) Entering f(1029) Entering f(1028) Entering f(1027) Entering f(1026) Traceback (most recent call last): File "f.py", line 11, in <module> print((f(2024) + f(2023)) / f(2022)) ^^^^^^^ File "f.py", line 7, in f result = n * f(n - 1) ^^^^^^^^ File "f.py", line 7, in f result = n * f(n - 1) ^^^^^^^^ File "f.py", line 7, in f result = n * f(n - 1) ^^^^^^^^ [Previous line repeated 996 more times] RecursionError: maximum recursion depth exceeded
С#, console:
... Entering F(1) Returning 1 for F(1) ... Returning 7,257415615307994E+306 for F(170) Returning ∞ for F(171) ... Returning ∞ for F(2023) Entering F(2022) ... Entering F(1) Returning 1 for F(1) ... Returning 7,257415615307994E+306 for F(170) Returning ∞ for F(171) ... Returning ∞ for F(2022) не число
Данная формула
f(2024) + f(2023)) / f(2022))
написана правильно (as is) но является как-бы троллингом вычислительной системы.
В числителе и знаменателе считаются факториалы чисел с разрядностью больше чем RSA ключи.
От десятки и выше каждый множитель добавляет 2 десятичных знака к проивзедению и в конце
где вы ведете учет последних множителей идут 2000*2001*2002 и так далее. Каждое умножение
добавляет 3 нуля. Миллионы-миллиарды-триллионы и так далее.
Rsa97 пишет про это в комментарии. Собственно он и ответил на вопрос как это считать. Сократив
ненужные вычисления.
Python-у очень тяжело считать такие числа. Это - как майнинг. И самое смешное что математически,
формула очень сильно упрощается если по закону сокращения дробей.