簡體   English   中英

無法在Python中使用遞歸調試列表總和

[英]Unable to debug sum of a list using recursion in Python

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,不存在首發名單?

切片永遠不會給出索引超出范圍的錯誤。 例如:

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

讓我們澄清一個問題:您似乎在問為什么這段代碼:

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

    if items == 0:
        return 0

    if items == 1:
        return array[0]

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

如果/當我們刪除第二個條件表達式時仍然有效:

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([])

由於您的第一個條件表達式,它變為:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM