如何将此代码更改为递归代码

时间:2017-05-18 03:13:19

标签: python recursion

这是我的python代码

def search(myList, number):
    for i in myList:
        if i[0] == number:
            return i[1]
    return None

myList = [(5107261, 'Ernst'), (6524256, 'Arvo')]

number = 5107261

print(search(myList, number))

现在我想用递归来编写它,但我不知道该怎么做。我需要一些指导来帮助我开始。

1 个答案:

答案 0 :(得分:3)

编写递归代码时,您需要定义基本案例,并且要定义一种方法,以便在每一步都使问题变小。在这个例子中,我们正在使用列表,所以一个好的基本情况是一个空列表,[]。如果列表为空,则返回None是有意义的。在递归的情况下,您希望做一些工作来缩小问题。在这种情况下,我们可以检查一个元素,如果该元素不是我们要搜索的元素,我们可以在较小版本的列表上再次调用该函数。

我们的结果是这样的函数:

def searchR(myList, number): 
    if length(myList) == 0: return None
    elif myList[0][0] == number: return myList[0][1]
    else: return searchR(myList[1:], number)

有3例。案例1是我们的基本案例,其中列表的长度为0.案例2是我们的成功案例,我们找到了搜索的目标。案例3是我们进行递归调用的地方。注意第一个元素是如何从新列表中删除的!如果第一个元素没有被删除,该函数将永远循环。