我在处理递归函数时遇到了一些困难。 我有这个函数,我想转换成递归的函数。 你能帮我吗?您的代码背后的原因是什么?
正常功能:
def sum(arg):
result = 0
for i in arg:
result += i
return result
答案 0 :(得分:1)
def recursive_sum(arg):
return arg[0] + recursive_sum(arg[1:]) if arg else 0
求和的任务可以简化为两种行动之一:
如果arg
不是空列表,则总和等于arg
的第一个元素+相同arg
的所有元素的总和第一个元素即arg[1:]
。但是,第二个术语也可以通过将recursive_sum
应用于新的arg
来获得!
如果arg
是一个空列表,则总和显然为零。这称为基本案例。这是你的递归终止。
您可以使用以下列表查看其工作原理:
recursive_sum([1,2,3,4,5])
-> 1 + recursive_sum([2,3,4,5])
-> 1 + (2 + recursive_sum([3,4,5]))
-> ...
-> 1 + 2 + 3 + 4 + 5 + recursive_sum([])
-> 1 + 2 + 3 + 4 + 5 + 0
= 15
请注意,执行arg[1:]
是list splicing的一个示例,它允许您获取包含除第一个元素之外的所有内容的新列表,并且您可以通过执行{{1}来测试列表是否为空}}