Python将此函数转换为递归函数

时间:2016-05-11 08:54:32

标签: python function recursion

我在处理递归函数时遇到了一些困难。 我有这个函数,我想转换成递归的函数。 你能帮我吗?您的代码背后的原因是什么?

正常功能:

def sum(arg):
    result = 0
    for i in arg:
        result += i
    return result

1 个答案:

答案 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}来测试列表是否为空}}