¿Cómo funciona la función de reducción?

egún tengo entendido, la función de reducción toma una listal y una funciónf. Luego, llama a la funciónf en los dos primeros elementos de la lista y luego llama repetidamente a la funciónf con el siguiente elemento de la lista y el resultado anterior.

Entonces, defino las siguientes funciones:

La siguiente función calcula el factorial.

def fact(n):
    if n == 0 or n == 1:
        return 1
    return fact(n-1) * n


def reduce_func(x,y):
    return fact(x) * fact(y)

lst = [1, 3, 1]
print reduce(reduce_func, lst)

Ahora, ¿no debería esto darme((1! * 3!) * 1!) = 6? Pero, en cambio, da720. Por qué720? Parece tomar el factorial de6 también. Pero, necesito entender por qué.

Alguien puede explicar por qué sucede esto y una solución alternativa?

Básicamente quiero calcular el producto de factoriales de todas las entradas en la lista. El plan de respaldo es ejecutar un ciclo y calcularlo. Pero, preferiría usar reduce.

Respuestas a la pregunta(18)

Su respuesta a la pregunta