现在,我为 Python(2.7 版)编写了二进制搜索。有时,它工作得很好,但有时它返回 None,尽管搜索的值在数组中。我已经尝试了每一种简单的方法来解决这个问题:我检查了函数返回的变量是否已定义,是否执行了 return 语句所在的工作流分支。并且:定义了变量,执行了分支。
这是代码:
def binarySearch( array, desiderata, iMin, iMax ):
# Returns the index of the first instance of what we search
print 'min'
print iMin
print 'max'
print iMax
# If our search array is empty
if ( iMin > iMax ):
return None
midP = (iMin + iMax)/2
curre = tapeNr( array[midP][TAPE_NUMBER] )
final = tapeNr( desiderata )
print 'curre'
print curre
print 'final'
print final
print 'midP'
print midP
if ( curre < final ):
# print midP
print "t: " + array[midP][TAPE_NUMBER] + ", d: " + desiderata
binarySearch( array, desiderata, midP + 1, iMax )
else:
if ( curre > final ):
# print midP
print "t: " + array[midP][TAPE_NUMBER] + ", d: " + desiderata
binarySearch( array, desiderata, iMin, midP - 1 )
else:
print 'hooray'
# Now, find the first occurence of the value I need
i = midP
while ( array[i][TAPE_NUMBER] == desiderata ):
i -= 1
print i
print (i + 1)
return (i + 1)
由于我的调试,有很多“打印”语句。最后一个,'print (i+1)',实际上打印 (!) 我需要的东西的索引值,但函数仍然返回 None。
你知道问题的根源吗?