Как работает функция уменьшения?
Насколько я понимаю, функция 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
слишком. Но мне нужно понять почему.
Может кто-нибудь объяснить, почему это происходит и обходной путь?
Я в основном хочу вычислить произведение факториалов всех записей в списке. План резервного копирования - запустить цикл и вычислить его. Но я бы предпочел использовать уменьшение.