Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释python中的一个递归函数_Python_Recursion_Python 3.x - Fatal编程技术网

解释python中的一个递归函数

解释python中的一个递归函数,python,recursion,python-3.x,Python,Recursion,Python 3.x,这是python3中的一个递归函数。我有一种感觉,我不完全理解返回语句中的ifelse逻辑 items = [3,5,8,6,1,2,10] def sum(items): head, *tail = items return head + sum(tail) if tail else head 请解释一下return语句中发生的事情。我相信你被整件事的*tail部分弄糊涂了: >>> items = [3,5,8,6,1,2,10] >>>

这是python3中的一个递归函数。我有一种感觉,我不完全理解返回语句中的
if
else
逻辑

items = [3,5,8,6,1,2,10]

def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head

请解释一下
return
语句中发生的事情。

我相信你被整件事的
*tail
部分弄糊涂了:

>>> items = [3,5,8,6,1,2,10]
>>> head, *tail = items
>>> head
3
>>> tail
[5, 8, 6, 1, 2, 10]
现在,当您到达列表的末尾时,所发生的情况是,列表中只有一项
*tail
返回一个空列表:

>>> items = [3]
>>> head, *tail = items
>>> head
3
>>> tail
[]
在这种情况下,函数只返回
head
的值

因此,为了解释您的三元语句,
(True)if(条件)else(False)


将头添加到列表其余部分的总和。因此,
sum
不断地将其分解,然后最终命中基本大小写,即,如果列表中只有一项,则返回该项。将更详细地解释这是如何工作的。

-1标题是一个问题,还是一个顺序?递归,adj:参见递归。谢谢,我被
return{var}弄糊涂了。如果a else B
语法与return一起在一行中使用时看起来相当令人费解。
head + sum(tail) if tail else head