无法在Python中使用递归调试列表总和

时间:2019-03-05 07:31:45

标签: python recursion

def sumList(arr):
    items = len(arr)
    if(items == 0):
        return 0
    elif(items == 1):
        return arr[0]
    else:
        return(arr[0] + sumList(arr[1:]))

print(sumList([2, 4, 6, 10, 123]))

如果“ else if”部分被注释掉,此代码仍将运行。但是,当仅存在一个项时,最后一个else是否不应该为最后一种情况给出错误,因为它正在返回从索引1开始的列表(不存在)?

2 个答案:

答案 0 :(得分:3)

切片将永远不会给出索引超出范围的错误。例如:

mylist = [1, 2, 3]
print(mylist[10000:])
# []

答案 1 :(得分:0)

让我们澄清一个问题:您似乎在问为什么使用此代码:

def sumList(array):
    items = len(array)

    if items == 0:
        return 0

    if items == 1:
        return array[0]

    return array[0] + sumList(array[1:])
如果/当我们删除 second 条件表达式时,

仍然有效:

def sumList(array):
    items = len(array)

    if items == 0:
        return 0

    #if items == 1:
    #   return array[0]

    return array[0] + sumList(array[1:])

@ Tomothy32提供的答案告诉我们,最后一行最终将变为:

return array[0] + sumList([])

由于您的 first 条件表达式,其变为:

return array[0] + 0

在Python 3中,我们可以简单地表示为:

def sumList(array):
    if not array:  # empty containers are false in boolean context
        return 0

    head, *tail = array  # Python 2: head, tail = array[0], array[1:]

    return head + sumList(tail)