python递归列表问题

Ech*_*cho 4 python recursion

1.我遇到了这段代码:Python递归和列表

def search(lst, key):
    if not lst:         # base case: list is empty
        return False
    elif lst[0] == key: # base case: current element is searched element
        return True
    else:               # recursive case: advance to next element in list
        return search(lst[1:], key)
Run Code Online (Sandbox Code Playgroud)

递归搜索可以从第一个元素开始search(lst[0:],key)吗?为什么第一个元素是单独处理的?

2.为什么这是递归?

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list) 
Run Code Online (Sandbox Code Playgroud)

Mon*_*Kin 5

关于第一个问题:

如果你开始递归,search(lst[0:], key)那么你将进入无限递归.请注意,对于要停止的递归,您需要每次都有一个比以前更小的列表,这就是情况search(lst[1:], key).

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

所以在这个递归中,你把问题分成两部分:(1)检查列表中的某个元素是否等于你的键(这个元素总是当前列表的第一个元素),以及(2)递归调用列表的其余部分.

关于第二个问题:

这不是递归:

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
Run Code Online (Sandbox Code Playgroud)

这些行的作用是创建一个列表,其中第4个元素是相同的列表:

>>> selfref_list == selfref_list[3] 
True
Run Code Online (Sandbox Code Playgroud)

但这与函数中的递归无关.