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