我正在像这样在Python上实现递归顺序搜索:
def search(list1,n,pos):
if n==list1[0]:
return pos
else:
if list1==[]:
return -1
else:
pos=pos+1
list1.pop(0)
return search(list1,n,pos)
def searchCall(n):
anylist=[1,2,3,4,5,6,7,8,9,10]
pos=0
search(anylist,n,pos)
def main():
i=searchCall(8)
print i
if __name__=="__main__":
main()
因此,我要做的是尝试在列表中找到元素n,然后在每个递归调用中弹出列表的第一个元素,并使用剩余的列表再次调用搜索。问题是,当我把这个:
if n==list1[0]:
print pos
它打印找到元素的位置,但是当我更改时:
return pos
它不打印
同样,当找不到该元素时,它应该返回-1,而是显示以下错误消息:
if n==list1[0]:
IndexError: list index out of range
有什么帮助吗?
谢谢
当找不到元素时,您会弹出列表中的每个项目,因此其长度为0。这意味着您应该在开始时检查该条件:
def search(list1,n,pos):
if list1==[]:
return -1
if n==list1[0]:
return pos
else:
pos=pos+1
list1.pop(0)
return search(list1,n,pos)
def searchCall(n):
anylist=[1,2,3,4,5,6,7,8,9,10]
pos=0
print search(anylist,n,pos)
编辑:正如Innox所说,只有在调用时您才是好人searchCall
,因为它每次都会实例化一个新列表,但是search
会消耗您的干草堆,因此这是一次搜索。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句