python递归列表问题

标签 python recursion

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/

相关文章:

pointers - 传递给nil的方法时,Golang指针未更新

python - 遍历不终止的批处理脚本

python - Django 注释与 select_related

python - 在 utf8 中迭代两个数据帧的列和 str.encode

python - 将循环 block 转换为列表理解

python - OOP Python 中的递归函数调用

ROOT TTree 中的 Python 字符串数组

python - 汉诺塔调用追踪

Mysql 递归计数和选择

javascript - 没有溢出的递归