递归顺序搜索不返回值

小的

我正在像这样在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章