Optimizando una función factorial en Python

Sep 26 2020

Así que logré esta función con el parámetro de desempaquetado (* x) , pero quiero que muestre el resultado, no lo devuelva, y quiero una buena optimización, lo que significa que todavía necesito que sea una función de dos líneas

1.def fac(*x):
    2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial

Intenté lograr esto implementando lambda pero no sabía cómo pasar el parámetro * x

Respuestas

4 JackAshton Sep 27 2020 at 01:59

Tu lambda factorial es correcta. Supongo que le gustaría calcular los factoriales para una lista, digamos [1, 2, 3] y generar los resultados, así es como puede lograrlo.

fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])

Que dará como resultado: 1, 2, 6

Otra opción, si tiene Python 3.8 es usar una lista de comprensión con el nuevo operador de morsa (: =), esto es un poco más complicado pero calculará y generará todos los factoriales hasta n inclusive mientras se ajustan las dos líneas requeridas.

fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])

Que dará como resultado: 1, 2, 6, 24, 120