簡體   English   中英

列表切片如何使用遞歸查找元素的總和

[英]How list slicing works for finding sum of element by using recursion

def s(arr):
    if len(arr) == 1:
        return arr[0]

    return arr[0] + s(arr[1:])

上面的代碼是使用遞歸查找列表的總和。 因此,當我通過提供切片列表再次調用 function 時,每次遞歸調用后列表的長度是否總是相同? 那我的基本條件如何滿足呢?

獲得列表總和的簡單解決方案是使用sum() function,例如list_sum = sum([1, 2, 3])

在每次迭代中,您的方法sarr參數的縮小版本上遞歸調用自身:這是在s(arr[1:])語句中完成的。

  1. 第一次調用: arr指向[1,2,3]
  2. 第二次調用: arr指向[2,3]
  3. 第三次調用: arr指向[3]

此時,由於len([3]) == 1 ,滿足 case base 保護並且遞歸返回值為3等等,從堆棧(LIFO)中彈出一個激活記錄。

這里有一個演示: 演示

當您對列表進行切片時,它會創建一個新列表,通常包含較少的元素。

您可以通過使用print檢查列表來輕松驗證它:

def print_indexed_list(l):
    print(dict(enumerate(l)))

arr = ['a', 'b', 'c', 'd', 'e']

print_indexed_list(arr)
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}

print_indexed_list(arr[1:])
{0: 'b', 1: 'c', 2: 'd', 3: 'e'}

print_indexed_list(arr[:4])
{0: 'a', 1: 'b', 2: 'c', 3: 'd'}

print_indexed_list(arr[1:3])
{0: 'b', 1: 'c'}

print_indexed_list(arr[::2])
{0: 'a', 1: 'c', 2: 'e'}

暫無
暫無

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

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