我不明白有关递归的部分代码(python)

时间:2018-05-06 08:53:20

标签: python recursion

我不理解递归部分。

def length(list1):
    if list1 == [] or list1 == "":
        return 0
    else:
        return 1+length(list1[1:])




a = [1,2,3,4,5]
print "Length of list is: ",length(a)

这是代码。而且该代码的作用就像len函数。 和output is for a; 5

但是返回1+length(list1[1:])那部分对我来说是不可理解的。 为什么有"1"?为什么它从1开始?为什么不"0"? 我想length(list1[0:])但它没有运行。 实际上我想,但是,我对这一部分一无所知。

任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

列表的长度可以递归地定义为:

  • 如果列表为空(等于空列表[]
  • ,则为0
  • 1 +被剥夺其第一个元素的列表的长度。 (例如,如果您有一个包含3个元素的列表,则长度与1 +相同列表的长度相同,但没有其中一个元素(2))

此处,list1[1:]是一个类似于list1的新列表,但没有第一个元素。

如果我们采用列表['a', 'b', 'c']

的具体示例

['a', 'b', 'c']与空列表[]不同,然后我们返回1 + length(['b', 'c'])['b', 'c']与空列表[]不同,然后length(['b', 'c'])返回1 + length(['c']);等等,直到length([])被调用。

答案 1 :(得分:1)

在python中:a [1:]表示"取从1开始的所有值,所以排除0和#34;,例如:

"abc"[1:] == "bc"
[2, 3, 4][1:] == [3, 4]

您正在查看的函数采用列表或字符串,然后删除项目并计算剩余项目直到找到空项目,在这种情况下返回其长度(0)。