使用python 2.7进行递归二进制搜索

时间:2018-03-08 16:06:55

标签: python-2.7 recursion

在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"

1 个答案:

答案 0 :(得分:0)

你在Python可以为你处理的事情上所做的工作比你需要的工作多得多,而且复杂性掩盖了你的问题。

  • 在您的基本案例之后,您有两个if语句,这些语句未涵盖整个范围 - 您忽略了平等的可能性。使用if/else并相应地调整要复制的范围。
  • 不要创建新数组并复制内容,请使用Python的子范围。
  • 不要在整个程序中不断重复相同的除法运算,只需执行一次并存储结果。
  • 如果您要打印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)