具有 reduce 的函数式递归函数

Functional recursive function with reduce

我得到了一个序列 tuple(range(1,5)),我应该用 reduce 编写一个递归函数来计算乘积 1*2*3*4*5 = 24。

我不知道如何递归执行此操作,我尝试查看此处 https://www.burgaud.com/foldl-foldr-python/ 并了解 reduce 是左折叠的。我的 none 递归实现很简单:

def red(func, seq):
    return reduce(func, seq)

red(lambda x, y: x*y, tuple(range(1,5)))

由于 reduce 是左折叠,我该如何实现?

要使函数递归,您需要添加一个终止案例(只剩下一个元素)和使问题变小的递归调用(在序列中向前一步)

def reduce(func, seq):
    if len(seq) == 1:
        return seq[0]
    return func(seq[0], reduce(func, seq[1:]))


print(reduce(lambda x, y: x * y, tuple(range(1, 5))))

输出:

24

如果您使用的是 python 3.10+,您应该在 python.

中查看模式匹配以获得更实用的样式