Как работает функция уменьшения?

Насколько я понимаю, функция Reduce принимает списокl и функцияf, Затем он вызывает функциюf в первых двух элементах списка, а затем повторно вызывает функциюf со следующим элементом списка и предыдущим результатом.

Итак, я определяю следующие функции:

Следующая функция вычисляет факториал.

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)

Теперь, не должно ли это дать мне((1! * 3!) * 1!) = 6? Но вместо этого это дает720, Почему720? Кажется, взять факториал6 слишком. Но мне нужно понять почему.

Может кто-нибудь объяснить, почему это происходит и обходной путь?

Я в основном хочу вычислить произведение факториалов всех записей в списке. План резервного копирования - запустить цикл и вычислить его. Но я бы предпочел использовать уменьшение.

Ответы на вопрос(9)

Ваш ответ на вопрос