具有 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.
中查看模式匹配以获得更实用的样式
我得到了一个序列 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.
中查看模式匹配以获得更实用的样式