wol*_*gel 1 python recursion binary-search python-3.x
所以我第一次尝试递归,在Python 3中编写一个简单的二进制搜索算法.运行我的程序后,我得到了这个错误:调用Python对象时超出了最大递归深度我做了一些研究,它说要添加这个线: sys.setrecursionlimit(40000)
我做了什么.当我输入不在我的列表中的数字时,我得到此分段错误错误.我读过这篇文章从我在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)
Run Code Online (Sandbox Code Playgroud)
您的代码中有几个错误:
start > end在进行递归之前.start = 0真的应该start = start,或者根本不添加它.修复这些错误,并稍微清理你的代码,这是有效的 -
def binarySearch(arr, start, end, x):
if start <= end:
mid = (end + start) // 2
if x == arr[mid]:
return mid
elif x < arr[mid]:
end = mid - 1
else:
start = mid + 1
return binarySearch(arr, start, end, x)
return -1
Run Code Online (Sandbox Code Playgroud)
binarySearch(arr, 0, len(arr), 55)
-1
binarySearch(arr, 0, len(arr), 58)
6
Run Code Online (Sandbox Code Playgroud)
另请注意,对于O(logN)算法,您永远不需要最大40,000的递归深度.如果您遇到"超出最大递归深度"错误,则应首先重新评估算法.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |