如何在python中正确递归?

时间:2014-03-09 21:50:04

标签: python recursion

所以,我们有两个int列表,我想要做的就是检查列表1中是否存在列表2的第一个int。如果是,则取消列表1的第一个int。我试图使用递归但是,我得到一个错误,说“TypeError:'int'对象是unsubscriptable”。帮助

def search(l1,l2):
    if l1 == [] and l2 == []:
        return []
    elif l1[0] == l2[0]:
        return [-(l1[0]),search(l1[1:],l2[1:])]
    else:
        return search(l1[1:],l2[0])

print search([1,2,1],[1,3,4])

1 个答案:

答案 0 :(得分:0)

递归函数必须终止。只有当两个列表都是空的时才会终止你的功能,这只有在你的第一个elif被击中时才会发生,如果最后一个elif踢了然后你会有不等长度的列表(如果你确定你通过了列表作为参数而不是整数。)

所以你的第一个elif建议你想检查l1的第一个元素是否等于l2的第一个元素,l1的第二个元素是否等于l2的第二个元素,l1的nth等于l2,依此类推。然而,第二个建议您要检查l1中的任何元素是否等于原始l2的第一个元素。如果您只是在l1中寻找l2 [0]的列表成员资格,那么您可以轻松完成。

因此,您似乎需要更明确地了解您想要返回的内容。当您尝试将整数(在最后一个elif中)传递给需要列表的函数搜索时,该函数不能正常工作。