я написал этот код на python, который из вольфрам альфы говорит, что он должен возвращать факториал любого положительного значения (я где-то ошибся), целое или нет:
from math import *
def double_factorial(n):
if int(n) == n:
n = int(n)
if [0,1].__contains__(n):
return 1
a = (n&1) + 2
b = 1
while a<=n:
b*=a
a+= 2
return float(b)
else:
return factorials(n/2) * 2**(n/2) *(pi/2)**(.25 *(-1+cos(n * pi)))
def factorials(n):
return pi**(.5 * sin(n*pi)**2) * 2**(-n + .25 * (-1 + cos(2*n*pi))) * double_factorial(2*n)
проблема, скажем, в том, что я ввожу пи в 6 десятичных знаков. 2 * n не станет плаванием с 0 в качестве десятичных дробей в ближайшее время, поэтому уравнение оказывается равным
pi**(.5 * sin(n*pi)**2) * 2**(-n + .25 * (-1 + cos(2*n*pi))) * double_factorial(loop(loop(loop(...)))))
как мне остановить рекурсию и получить ответ?
У меня были предложения добавить индекс к определениям или что-то в этом роде, но проблема в том, что, если код останавливается, когда достигает индекса, по-прежнему нет ответа, чтобы вернуться в предыдущие «гнезда» или как вы их называете