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