python递归列表问题

python递归列表问题,python,recursion,Python,Recursion,1.我遇到了以下代码: 递归搜索能否从第一个元素开始作为搜索(lst[0:],key)?为什么第一个元素要单独处理 2.为什么这是一个递归 selfref_list = [1, 2, 3] selfref_list.append(selfref_list) 关于第一个问题: 如果以search(lst[0:],key)的形式启动递归,则将输入无限递归。请注意,要停止递归,每次都需要一个比以前更小的列表,search(lst[1:],key) 另外,关于为什么要单独处理第一个元素,请注意,您需

1.我遇到了以下代码:

递归搜索能否从第一个元素开始作为
搜索(lst[0:],key)
?为什么第一个元素要单独处理

2.为什么这是一个递归

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list) 

关于第一个问题:

如果以
search(lst[0:],key)
的形式启动递归,则将输入无限递归。请注意,要停止递归,每次都需要一个比以前更小的列表,
search(lst[1:],key)

另外,关于为什么要单独处理第一个元素,请注意,您需要一次对
一个元素执行比较,该元素是
lst[0]

因此,在这个递归过程中,您将问题分为两部分:(1)检查列表中的某个元素是否与您的键相等(该元素始终是当前列表的第一个元素),以及(2)列表的剩余部分的递归调用

关于第二个问题:

这不是递归:

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
这些行所做的是创建一个列表,其中第4个元素是相同的列表:

>>> selfref_list == selfref_list[3] 
True

但是这与函数中的递归无关。

对于第一个问题,在第一行,
defsearch(lst,key)
。也就是说,每次调用该函数时,它都将使用整个
lst
,这与
lst[0:][/code>相同。现在,你的理由是什么

    else: # recursive case: advance to next element in list
        return search(lst[1:], key)

定义遍历当前第一个元素后发生的情况。基本上,它说,“在第一个元素被检查后,从下一个元素开始继续检查其余元素。”

为什么第一个元素被单独处理: 因为递归方法的每个实例都是您工作的一部分,所以函数必须检查数组中的一个元素。当您为一个包含一个元素的列表调用函数时,第一个元素或
lst[0]
将是唯一剩下的元素,所以为什么不在列表不为空时检查它呢

为什么这是一个递归?

selfref_list=[1,2,3]
selfref\u列表。追加(selfref\u列表)

从字面意义上讲,它不是递归。相反,数据类型是递归的,这意味着对象可能包含在同一对象类型的实例中。或者在更正式的数学术语中,语法树中的一个节点类型允许有一个到另一个类似类型节点的输出边


对于那些刚接触递归编程的人来说,这是一个很好的问题。你不必对你的upvote2发表评论。这不是一个真正的递归,它被称为循环或循环对象——一个包含对自身的引用的对象。换句话说,您的列表包含对自身的引用,这就是它如何循环的。我敢说您可以调用
search(range(01002),1001)
我同意您的答案,除了最后一部分
selfref\u list.append(selfref\u list)
;OP含糊不清地询问了循环对象。我认为你需要更广泛地研究语言中递归的主题。这个概念的结合确实提供了一个机会,让我们不去充分讨论这个问题,但我更希望人们真正思考这个问题。还有这个
    else: # recursive case: advance to next element in list
        return search(lst[1:], key)