递归搜索布尔返回函数

时间:2010-11-23 03:21:05

标签: python

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

任何人都可以解释一下我需要做什么来描述吗?我不知道有什么关于recurrsion知道从哪里开始。它用于考试复习实验室作业。

这是我提供的代码。

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.
    """

Sample Main:

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

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

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

2 个答案:

答案 0 :(得分:0)

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

  • 有一个或多个终止案例。
  • 所有其他情况都是当前案件的一种稍微简单的形式。

因此,例如,添加两个正数ab的(非常低效)方式:

  • 如果b为零,则返回a。
  • 另外添加两个号码a+1b-1

类似的东西:

def addtwo (a, b):
    if b == 0:
        return a
    return addtwo (a+1, b-1)

现在让我们考虑你的任务案例:

  • 如果列表为空,则表示您没有找到它:return false。
  • 如果列表的第一个元素与您的键相同,则找到它:return true。
  • 否则通过删除第一个元素查看列表。

在伪代码中(非常类似于Python,但又不同,你必须做一些工作):

def search (list, key):
    if list is empty:
        return false
    if key == first item in list:
        return true
    return search (list with first element removed, key)

答案 1 :(得分:0)

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

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

对于更大的列表,您比较第一个元素,如果它与key相同,则立即返回True,但是如果它不是,则执行{{{{}的所有检查1}} ...

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

rest of the list