Python 递归搜索布尔返回函数

Python 递归搜索布尔返回函数,python,Python,编写一个递归函数搜索(l,key),返回一个布尔值:如果key在列表l中,则为True;如果不是,则为False。描述基本情况以及小问题与大问题的关系。不能使用in运算符或index()列表方法 有人能解释一下我需要在这里做什么来描述吗?我对复发一无所知,不知道从哪里开始。这是考试复习实验作业 这是我得到的代码 def search(l,key): """ locates key in list l. if present, returns True; else returns

编写一个递归函数搜索(l,key),返回一个布尔值:如果key在列表l中,则为True;如果不是,则为False。描述基本情况以及小问题与大问题的关系。不能使用in运算符或index()列表方法

有人能解释一下我需要在这里做什么来描述吗?我对复发一无所知,不知道从哪里开始。这是考试复习实验作业

这是我得到的代码

def search(l,key):
    """
    locates key in list l.  if present, returns True; else returns False.
    PRE: l is a list.
    POST: l is unchanged; returns True if key in l; False otherwise.
    """
主样本:

l1 = [1, '2', 'x', 5, -2]

print search(l1, 'x')    # should output: "True"

print search(l1, 2)      # should output: "False"

所有递归都遵循相同的规则:

  • 有一个或多个终止案例
  • 其他每一个案例都是当前案例的一个稍微简单的形式
因此,例如,一种(非常低效的)将两个正数相加的方法
a
b

  • 如果
    b
    为零,则返回a
  • 否则,添加两个数字
    a+1
    b-1
比如:

def addtwo (a, b):
    if b == 0:
        return a
    return addtwo (a+1, b-1)
现在让我们考虑一下你的任务案例:

  • 如果列表为空,则未找到它:return false
  • 如果列表的第一个元素等于您的键,您会发现它:return true
  • 否则,通过删除第一个元素查看列表
在伪代码中(与Python非常相似,但差异很大,您需要做一些工作):


关于递归的每一个问题都应该以同样的方式处理(通常)…问问自己什么是
基本情况
,然后在更高的情况下建立这个基础

因此,在这个问题中,问问自己,我什么时候可以确定
列表中没有
。。。 很明显,当列表为空时,您肯定它不存在

对于较大的列表,比较第一个元素,如果它与
键相同,则立即返回
True
,如果不是,则对列表的
其余部分执行所有检查

所以研究这些方面,, 这是你的算法

function locate(lst,key)
    if lst == emptylist then return False
    if lst[0] == key then return True
    else return locate(lst[1..],key) //i use the notation lst[1...] to indicate list starting from 1 index.

帮我一个忙,对你的教授大喊大叫,因为他在示例代码中使用小写字母“l”作为标识符。然后读《小阴谋家》:)哈哈,我知道它让人困惑。哈哈,不管怎样,我还是遇到了一个错误:(出于某种原因,它返回了一个错误,其中最后一行接受整数而不是浮点数。(@justin,可以共享您的代码,(编辑您的原始问题),我们将尝试更正它:)我有一个非常新的问题。如果在递归堆栈中有些返回True,有些返回False,那么返回将如何工作?
function locate(lst,key)
    if lst == emptylist then return False
    if lst[0] == key then return True
    else return locate(lst[1..],key) //i use the notation lst[1...] to indicate list starting from 1 index.