【问题标题】:recursive binary search using python 2.7使用python 2.7的递归二进制搜索
【发布时间】:2018-03-09 02:58:18
【问题描述】:

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

【问题讨论】:

  • 您没有搜索数组的右半部分。

标签: python-2.7 recursion


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助,但由于某种原因,每当我尝试运行此代码时,我最终总是会再次出现“错误”...尝试对其进行一些更改以使其正常工作但是所以远我不成功
  • 我有硬连线的测试用例,所以我可以留在我的编辑器中。因此,我没有注意到您正在将字符串与数组中的数字进行比较,这是行不通的。现已修复。
  • 是的...非常感谢,就在看到您的评论之前,我使用了一行一行的调试器,过了一会儿看到我使用的是 raw_input 而不是 input...它现在可以工作了。谢谢
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 2021-04-20
  • 1970-01-01
  • 2016-11-14
相关资源
最近更新 更多