0

我是递归的初学者。决定通过编写递归二分搜索程序将我的脚趾浸入水中。下面是代码:

def midSplit(listo,element):

    halfSlice = (len(listo)-1)//2

    
    if len(listo) == 1 and listo[0] == element:
        return 'Element Found'

    elif len(listo) == 1 and listo[0] != element:
        return 'Not Found'


    if halfSlice < 1:
        return 'Not Found'

    if listo[halfSlice] > element:
        midSplit(listo[:halfSlice],element)

    elif listo[halfSlice] < element:
        midSplit(listo[halfSlice+1:],element)
    
    elif listo[halfSlice] == element:
        return 'Element Found'
    
    

print(
    midSplit(
    sorted([int(input('Enter an element: ')) for i in range(int(input('How Many Elements Do You Want Your List To Have?: ')))]),
    int(input('Pick The Element To Search For: ')))
    )

当我选择输入 3 个元素 12,24,25 并选择搜索 25 时,函数返回 None?但是怎么做?当函数第一次运行时,halfSlice = 1,listo[halfSlice] = 24,并且由于 24 < 25,

elif listo[halfSlice] < element:
        midSplit(listo[halfSlice+1:],element)

将执行。这次该函数将 listo[2] 和 25 作为参数。由于函数中的第一个 if caluse 检查 list 参数是否是单元素列表,所以在这种情况下它会是真的,对吧?len(listo) 确实是 1,而 listo[0] = 25 确实是元素。

所以它应该返回“找到元素”对吗?但它反而返回 None?为什么?

4

0 回答 0