【发布时间】:2018-02-03 02:54:32
【问题描述】:
所以我第一次尝试递归,在 Python 3 中编写了一个简单的二进制搜索算法。运行我的程序后,我收到了这个错误:调用 Python 对象时超出了最大递归深度
我做了一些研究,它说要添加这一行:sys.setrecursionlimit(40000)
我做了什么。当我输入一个不在我的列表中的数字时,我会收到此分段错误错误。我读到了这个post 从我在 Python 中收集到的内容中,深度递归耗尽了内存?
我无法想象 Python 不支持深度递归?无论如何,这是我的代码:
import sys
arr = [5, 17, 23, 33, 39, 44, 58, 62, 70, 74, 82, 99]
end = len(arr)
sys.setrecursionlimit(40000)
def binarySearch(arr, start, end, x):
#print("This is end: {}".format(end))
mid = int((end + start)/2)
#print("This is start {}".format(start))
#print("This is end {}".format(end))
#print("This is mid {}".format(mid))
if x == arr[mid]:
return x
elif (x < arr[mid]):
start = 0
end = mid - 1
return binarySearch(arr, start, end, x)
else: # if x > arr[mid]
start = mid + 1
end = end
return binarySearch(arr, start, end, x)
position = binarySearch(arr, 0, 12, 55)
print(position)
【问题讨论】:
-
没有办法使用二进制搜索需要那么多递归调用。没有这么大的数组可以放入内存。
-
我还没有检查你的代码,但是如果你在这么小的数据结构上遇到递归错误,那么你的算法做错了。 (一般遇到递归错误说明你做错了什么,或者你的问题不是递归问题,不应该有递归解决方案)
-
您的代码没有规定
x不在arr中。在这种情况下,您希望它返回什么? (另外,您可能应该返回mid而不是x) -
这里有一些错误。
start = 0就是其中之一。另一个是您没有检查基本情况start > end。 -
“我无法想象 Python 不支持深度递归?” - Python 肯定支持深度递归,但 无限 内存不是。即使您将最大递归级别设置为较大的数字,解释器仍然可能会耗尽内存。
标签: python python-3.x recursion binary-search