¿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.