這是使用python的字典程序。但我發(fā)現(xiàn)了這樣的錯誤。我想知道我看到的原因..如果你知道,請問我。這是我得到的錯誤:$ read datafile.txt$ size176050$ find YesterdayTraceback (most recent call last): File "C:/Users/LG/PycharmProjects/alg1/lesson1.py", line 55, in <module> word_index = binarysearch(words,word,0,len(words)-1) File "C:/Users/LG/PycharmProjects/alg1/lesson1.py", line 25, in binarysearch return binarysearch(data, target,middle+1, end) File "C:/Users/LG/PycharmProjects/alg1/lesson1.py", line 23, in binarysearch return binarysearch(data,target,begin,middle-1) File "C:/Users/LG/PycharmProjects/alg1/lesson1.py", line 23, in binarysearch return binarysearch(data,target,begin,middle-1) File "C:/Users/LG/PycharmProjects/alg1/lesson1.py", line 23, in binarysearch return binarysearch(data,target,begin,middle-1) [Previous line repeated 994 more times] File "C:/Users/LG/PycharmProjects/alg1/lesson1.py", line 13, in binarysearch if begin > end:RecursionError: maximum recursion depth exceeded in comparisonProcess finished with exit code 1這是我的代碼:def datafile(file): f = open(file,'rt',encoding='UTF8') while True: line = f.readline() if not line: break if line == '\n': continue lines.append(line.split('\n')[0]) return linesdef binarysearch(data,target,begin,end): if begin > end: if data[end]: #"end" index's front data exist return end else: return -1 else: middle = int(begin+end/2) if data[middle] == target: return middle elif data[middle] > target: return binarysearch(data,target,begin,middle-1) else: return binarysearch(data, target,middle+1, end)if __name__=="__main__": lines = [] # all list words = [] # list that all words is changed to lower pos = [] # word's pos list
1 回答

哆啦的時光機
TA貢獻1779條經(jīng)驗 獲得超6個贊
你的二分搜索算法有錯誤:
middle = int(begin+end/2)
由于除法優(yōu)先于加法,因此不會計算中間位置。它可能導致middle
變得大于end
,如果data[middle] > target
那么下一個間隔將在下一次遞歸調用中更大。這會導致無限遞歸。
更正為:
middle = int((begin+end)/2)
或者干脆:
middle = (begin+end)//2
添加回答
舉報
0/150
提交
取消