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