# Коэффициенты Ланцоша для g=7, n=9
g = 7
lanczos_coefficients = [
    0.99999999999980993,
    676.5203681218851,
    -1259.1392167224028,
    771.32342877765313,
    -176.61502916214059,
    12.507343278686905,
    -0.13857109526572012,
    9.9843695780195716e-6,
    1.5056327351493116e-7
]

# Предварительно вычисленные значения для функции gamma_ln(z) при z >= 0.5 и z < 0.5
def gamma_ln(z):
    """
    Вычисляет натуральный логарифм функции Γ(z) с использованием аппроксимации Ланцоша без циклов и рекурсии.

    Параметры:
        z (float): Входное значение для вычисления ln(Γ(z)). Не должно быть неотрицательным целым числом.

    Возвращает:
        float: Натуральный логарифм функции Γ(z).

    Исключения:
        ValueError: Если z является неотрицательным целым числом, где Γ(z) не определена.
    """
    if z <= 0 and z == int(z):
        raise ValueError("Функция Γ(z) не определена для неположительных целых чисел.")

    log_sqrt_2pi = 0.9189385332046727  # 0.5 * log(2 * π)

    if z < 0.5:
        # Формула отражения: Γ(z) = π / (sin(πz) * Γ(1 - z))
        # ln(Γ(z)) = ln(π) - ln(sin(πz)) - ln(Γ(1 - z))

        one_minus_z = 1 - z
        z_minus1 = one_minus_z - 1

        # Аппроксимация Ланцоша для ln(Γ(1 - z))
        lanczos_sum_1mz = (
            lanczos_coefficients[0] +
            lanczos_coefficients[1] / (z_minus1 + 1) +
            lanczos_coefficients[2] / (z_minus1 + 2) +
            lanczos_coefficients[3] / (z_minus1 + 3) +
            lanczos_coefficients[4] / (z_minus1 + 4) +
            lanczos_coefficients[5] / (z_minus1 + 5) +
            lanczos_coefficients[6] / (z_minus1 + 6) +
            lanczos_coefficients[7] / (z_minus1 + 7) +
            lanczos_coefficients[8] / (z_minus1 + 8)
        )

        t_1mz = z_minus1 + g + 0.5
        ln_gamma_1mz = (
            log_sqrt_2pi +
            (z_minus1 + 0.5) * Science.ln(t_1mz) -
            t_1mz +
            Science.ln(lanczos_sum_1mz)
        )

        ln_pi = Science.ln(pi)
        ln_sin_pi_z = Science.ln(Science.sin(Science.pi * z))
        ln_gamma_z = ln_pi - ln_sin_pi_z - ln_gamma_1mz
        return ln_gamma_z
    else:
        # Аппроксимация Ланцоша для ln(Γ(z))
        z_minus1 = z - 1

        lanczos_sum_z = (
            lanczos_coefficients[0] +
            lanczos_coefficients[1] / (z_minus1 + 1) +
            lanczos_coefficients[2] / (z_minus1 + 2) +
            lanczos_coefficients[3] / (z_minus1 + 3) +
            lanczos_coefficients[4] / (z_minus1 + 4) +
            lanczos_coefficients[5] / (z_minus1 + 5) +
            lanczos_coefficients[6] / (z_minus1 + 6) +
            lanczos_coefficients[7] / (z_minus1 + 7) +
            lanczos_coefficients[8] / (z_minus1 + 8)
        )

        t_z = z_minus1 + g + 0.5
        ln_gamma_z = (
            log_sqrt_2pi +
            (z_minus1 + 0.5) * Science.ln(t_z) -
            t_z +
            Science.ln(lanczos_sum_z)
        )
        return ln_gamma_z

def gamma(z):
    """
    Вычисляет функцию Γ(z) для действительного числа z с использованием аппроксимации Ланцоша без циклов и рекурсии в ln(Γ(z)).

    Параметры:
        z (float): Входное значение для вычисления Γ(z). Не должно быть неотрицательным целым числом.

    Возвращает:
        float: Функция Γ(z) в точке z.

    Исключения:
        ValueError: Если z является неотрицательным целым числом, где Γ(z) не определена.
    """
    return Science.exp(gamma_ln(z))
попробуй без циклов, рекурсий и попробуй улучшить точность для n > 150 , там ошибка ухудшается