如何终止python中的递归函数



我正试图在python中使用递归编程编写一个二进制搜索算法。我的测试数组是[1, 5, 8, 10, 14, 20]。如果数组中有一个数字,程序应该返回1,否则它将返回0。如果测试的数字是1,它将首先获得索引为floor(len(array)/2)的中间元素,在本测试用例中为10,并将其与1进行比较。它将对子阵列[1, 5, 8, 10]递归地执行相同的过程,直到子阵列中只有两个元素,即[1, 5]。然后,它将测试编号1与它们中的每一个进行比较。如果测试编号包含在两个元素的最终子数组中,则程序应返回1,否则返回0。然而,令人惊讶的是,最终结果是None

我想这可能是因为递归没有终止。如何解决此问题?

import numpy as np
import math
def myBinarySearch(array, x):  # array is sorted
print("length of array: " + str(len(array)))
if (len(array)==2):
# print("length of array: " + str(len(array)))
# print("OK")
print("array" + str(array) + "t" + str(array[0]) + " " + str(array[1]) + "telement: " + str(x))
if (x==array[0]):  # element is found
print("find: 0")
return 1
elif (x==array[1]):
print("find: 1")
return 1
else:
print("not find")
return 0
midIdx = math.floor(len(array)/2)
print("mid element: " + str(array[midIdx]))
if (x==array[midIdx]):  # element is found
return 1  
if (x<array[midIdx]):
myBinarySearch(array[0:midIdx+1], x)
if (x>array[midIdx]):
myBinarySearch(array[midIdx, len(array)], x)


A = np.array([1, 5, 8, 10, 14, 20])
# B = np.array([1, 3, 5, 7, 9, 11, 20, 14, 16])
# B = np.array([1, 21, 20, 14])
B = np.array([1])
C = np.zeros(shape=(1,len(B)))
for i in range(len(B)):
#print("B[i]: " + str(B[i]))
inArray = myBinarySearch(A, B[i])
print(inArray, end="")
C[0][i] = inArray
# print("n" + str(A))    

当向下递归时,例如在myBinarySearch(array[0:midIdx+1], x),不会返回结果。

例如

if (x<array[midIdx]):
myBinarySearch(array[0:midIdx+1], x)
if (x>array[midIdx]):
myBinarySearch(array[midIdx, len(array)], x)

应该是

if (x<array[midIdx]):
return myBinarySearch(array[0:midIdx+1], x)
if (x>array[midIdx]):
return myBinarySearch(array[midIdx, len(array)], x)

最新更新