Python 3.x 我发现一个递归函数对列表中的元素求和很难理解,不知是否有人能给我解释清楚

Python 3.x 我发现一个递归函数对列表中的元素求和很难理解,不知是否有人能给我解释清楚,python-3.x,recursion,Python 3.x,Recursion,我知道第一个条件是函数的基本情况,但我不理解返回sum\u recursive(L[:idx])+sum\u recursive(L[idx:])。为什么sum\u recursive(L[:idx])首先运行,然后sum\u recursive(L[idx:在len(L)!=1:之后运行。另外,在sum\u recursive(L[:idx])+sum\u recursive(L[idx:])中似乎有一个列表和一个索引的总和这对我来说没有意义。谢谢让我们看看是否可以用一个例子来解释: def

我知道第一个条件是函数的基本情况,但我不理解
返回sum\u recursive(L[:idx])+sum\u recursive(L[idx:])
。为什么
sum\u recursive(L[:idx])
首先运行,然后
sum\u recursive(L[idx:
len(L)!=1:
之后运行。另外,在
sum\u recursive(L[:idx])+sum\u recursive(L[idx:])中似乎有一个列表和一个索引的总和
这对我来说没有意义。谢谢

让我们看看是否可以用一个例子来解释:

def sum_recursive(L):
  if len(L) == 1:
    return L[0]

  idx = len(L) // 2
  return sum_recursive(L[:idx]) + sum_recursive(L[idx:])

您好@kweks45。可视化应该能更好地解释。@Vishnudev;我的担心是在这一点上。为什么只有
L[:idx])
被传递回
sum\u recursive()
sum\u recursive的返回语句返回sum\u recursive(L[:idx])+sum\u recursive(L[idx:])的和。函数sum_recursive将列表分成两半,行idx=len(L)//2。切片L[:idx]是以第一个元素开始并以idex-1结束的列表。切片L[idx:]是从idx到末尾的列表。重复此操作,直到列表为len 1,此时它返回到上一个调用并将第一个和最后一个列表元素相加,从末端到中间的工作将随后的元素添加到总数中。希望这个他,;lps@itprorh66好的,谢谢。在它到达基本情况后,执行哪个函数?还是执行以前的求和调用?调用如何知道将先前计算的列表的总和推送到下一个列表进行计算?@itprorh66是否可以澄清每个返回语句的作用?当达到基本情况条件时,它返回一个索引。但它将索引返回到哪里呢?
sum_recursive([1,2,3,4]):
len(L) > 1, so:
idx = 4//2 = 2
return            #splits list in half and sums each half
  (   sum_recursive([1,2])
      len(L) > 1 so:
      idx = 2//2 = 1
      return      #splits list in half again and sums each half
        (   sum_recursive([1])
            len(l) = 1 so:
            return 1
        +
            sum_recursive([2])
            len(L) = 1 so
            return 2
        ) = 3 
    +
     sum_recursive([3,4])
     len(L) = 2 so:
     idx = 2//2 = 1
     return      #splits list in half abain and sums each half 
       (  sum_recursive([3])
          len(l) = 1 so:
          return 3
        +
          sum_recursive([4])
          len(L) = 1 so
          return 4
        ) = 7 
    ) = 10