Como reduzir a função funciona?

Tanto quanto eu entendo, a função reduzir leva uma listal e uma funçãof. Em seguida, chama a funçãof nos dois primeiros elementos da lista e depois chama repetidamente a funçãof com o próximo elemento da lista e o resultado anterio

ntão, eu defino as seguintes funções:

A função a seguir calcula o fatoria

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)

Agora, isso não deveria me dar((1! * 3!) * 1!) = 6? Mas, em vez disso, dá720. Por quê720? Parece levar o fatorial de6 também. Mas preciso entender o porquê.

lguém pode explicar por que isso acontece e uma solução alternativ

Eu basicamente quero calcular o produto dos fatoriais de todas as entradas da lista. O plano de backup é executar um loop e computá-lo. Mas eu prefiro usar reduzir.

questionAnswers(18)

yourAnswerToTheQuestion