在comp sci类中编写了这段代码,我无法使它工作,每次运行它时它总是返回false。它应该是一个递归二进制搜索方法......任何想法为什么它只返回false?
arr = [1,10,12,15,16,122,132,143,155]
def binarysearch(arr,num):
arr2 = []
if (len(arr) == 1):
if (arr[0] == num):
return 1
else:
return 0
for i in range (len(arr)/2):
arr2.append(0)
if (arr[len(arr)/2]>num):
for x in range (len(arr)/2,len(arr)):
arr2[x-(len(arr)/2)]=arr[x]
return binarysearch(arr2,num)
if(arr[len(arr)/2]<num):
for x in range(0, len(arr) / 2 ):
arr2[x] = arr[x]
return binarysearch(arr2, num)
num = raw_input("put number to check here please: ")
if(binarysearch(arr,num)==1):
print "true"
else:
print "false"
答案 0 :(得分:0)
你在Python可以为你处理的事情上所做的工作比你需要的工作多得多,而且复杂性掩盖了你的问题。
if
语句,这些语句未涵盖整个范围 - 您忽略了平等的可能性。使用if/else
并相应地调整要复制的范围。True/False
,为什么不直接返回,而不是将结果编码为0/1
,然后对其进行解码以执行print
?raw_input
会返回一个字符串,您需要将其转换为int
。所有这些修订的最终结果将是:
def binary_search(arr,num):
if (len(arr) == 1):
return (arr[0] == num)
mid = len(arr) / 2
if (arr[mid] > num):
return binary_search(arr[:mid], num)
else:
return binary_search(arr[mid:], num)
num = int(raw_input("put number to check here please: "))
print binary_search(arr,num)