Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中正确递归?_Python_Recursion - Fatal编程技术网

如何在python中正确递归?

如何在python中正确递归?,python,recursion,Python,Recursion,我们有两个int列表,我要做的就是检查列表2中的第一个int是否存在于列表1中。如果是,则对列表1的第一个int求反。我尝试使用递归,但是,我得到一个错误,说“TypeError:‘int’对象是不可订阅的”。帮忙 递归函数必须终止。只有当两个列表都为空时,函数才会终止。只有始终命中第一个elif时,函数才会终止。如果最后一个elif启动,则函数将具有长度不等的列表(同时,如果确保将列表作为参数而不是整数传递) 因此,您的第一个elif建议您检查l1的第一个元素是否等于l2的第一个元素,l1的第

我们有两个int列表,我要做的就是检查列表2中的第一个int是否存在于列表1中。如果是,则对列表1的第一个int求反。我尝试使用递归,但是,我得到一个错误,说“TypeError:‘int’对象是不可订阅的”。帮忙


递归函数必须终止。只有当两个列表都为空时,函数才会终止。只有始终命中第一个elif时,函数才会终止。如果最后一个elif启动,则函数将具有长度不等的列表(同时,如果确保将列表作为参数而不是整数传递)

因此,您的第一个elif建议您检查l1的第一个元素是否等于l2的第一个元素,l1的第二个元素是否等于l2的第二个元素,l1的第n个元素是否等于l2,依此类推。然而,第二个建议是检查l1中的任何元素是否等于原始l2的第一个元素。如果您只是在l1中查找l2[0]的列表成员身份,则可以轻松地完成此任务


所以,你似乎需要更明确地说明你想要返回的内容。当您试图将一个整数(在最后一个elif中)传递给需要列表的函数搜索时,现有函数无法工作。

有一个输入错误:
search(l1[1],l2[0])
但我想比较l2的第一个整数。因为l1的第一个int和l2的第一个int不相等,所以保留l2的第一个int并检查l1的其余部分。l2的第一个int不应该写为l2[0]吗?您的函数
search()
需要两个列表。您不应该尝试将其传递为整数。你需要这样的东西:
def(l1,l2):l1[0]=-l1[0]如果l1[0]中的l2[0]在l1 else l1[0]
现在我得到了“indexer:list index超出范围”好好想想,第一条评论是对的,你的else语句正在检查
l1
中与
l2
相比的下一条。。。您必须执行
l2[:]
才能复制它。
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])