[英]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])
在每次迭代中,您的方法s
在arr
參數的縮小版本上遞歸調用自身:這是在s(arr[1:])
語句中完成的。
arr
指向[1,2,3]
arr
指向[2,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.