用python写了一个递归实现的折半查找函数,开始时的代码如下:
"""折半查找法,排序为从大到小排序"""
def halffind(inTab,inData,begin,end):
if begin < end :
temp = (begin+end)//2
if inData == inTab[temp]:
return temp
elif begin+1 == end: #当begin+1==end时,begin = temp
return end
if inData > inTab[temp]:
halffind(inTab,inData,begin,temp)
else :
halffind(inTab,inData,temp,end)
else:
print('begin must smaller than end')
return -1;
测试如下:
>>> a = array([9,8,7,6,5,4,3,2,1])
>>> r = halffind(a,6,0,8)
>>> r
>>>
>>> type(r)
<type 'NoneType'>
>>>
也就是说返回值为None,搞了两个小时后才发现,python和C语言不太一样,在递归的地方也要return
正确的代码为:
"""折半查找法,排序为从大到小排序"""
def halffind(inTab,inData,begin,end):
if begin < end :
if inData>=inTab[begin]:
return begin
elif inData<inTab[end]:
return -1
if begin+1 == end: #当begin+1==end时,begin = temp
return end
temp = (begin+end)//2
if inData > inTab[temp]:
return halffind(inTab,inData,begin,temp)
else :
return halffind(inTab,inData,temp,end)
else:
print('begin must smaller than end')
return -1;
测试结果:
>>> a = array([9,8,7,6,5,4,3,2,1])
>>> r = halffind(a,6,0,8)
>>> r
3
另外分享一个网站,学习python:http://sebug.net/paper/python/index.html