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)
关于第一个问题:
如果你开始递归,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)
但这与函数中的递归无关.