1.我遇到了这段代码:Python Recursion and list
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)
递归搜索是否可以从第一个元素开始作为search(lst[0:],key)
?为什么要单独处理第一个元素?
2.为什么这是递归?
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
最佳答案
关于第一个问题:
如果您以 search(lst[0:], key)
开始递归,那么您将进入无限递归。请注意,要停止递归,每次都需要一个比以前更小的列表,search(lst[1:], key)
就是这种情况。
此外,至于为什么第一个元素被单独处理,请注意您需要一次对 key
一个元素进行比较,该元素是 lst[0]
.
所以在这个递归中,你把问题分成两部分:(1)你检查列表的某个元素是否等于你的键(这个元素总是当前列表的第一个元素),以及 (2) 在列表的rest 中进行递归调用。
关于第二个问题:
这不是递归:
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
这些行的作用是创建一个列表,其中第 4 个元素是同一个列表:
>>> selfref_list == selfref_list[3]
True
但这与函数中的递归无关。
关于python递归列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958705/