此代码对字符串中的字符进行递归二分搜索。
当print
语句没有被注释掉时,它似乎与递归和二分法一起使用,但返回if
的{{1}}语句似乎没有触发。
True
答案 0 :(得分:1)
您需要返回每个递归调用的结果。
出于某种原因,这是一个非常常见的错误。
答案 1 :(得分:0)
您不应该在计算中使用round
,因为您使用float
而不是int
作为字符串的索引。
改为使用int
:
str(b[int(c/2)]))
答案 2 :(得分:0)
此代码有效,在递归函数调用之前返回:
def isIn(char, aStr):
'''
char: a single character
aStr: an alphabetized string
returns: True if char is in aStr; False otherwise
'''
b = sorted(aStr)
c = len(aStr)
# print("string b " + str(b))
# print("c " + str(c))
# print("element middle: " + str(b[round(c/2)]))
#print("char: " + str(char))
#print(str(char) == str(b[round(c/2)]))
if ((str(char) == str(b[int(c/2)]))): # this if statement does not seem to fire
return True
elif (c == 1 and char != str(b[round(c/2)])) or (c == 0 and char != "") :
return False
#print("false")
else:
#if str(char) == str(b[round(c/2)]):
# return True
# print("true")
if char > b[round(c/2)]:
return isIn(char, b[round(c/2):c])
elif char < b[round(c/2)]:
return isIn(char, b[0:round(c/2)])
else:
return False
#print('fales')