我是递归的初学者。决定通过编写递归二分搜索程序将我的脚趾浸入水中。下面是代码:
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?为什么?