遞歸允許函數(shù)自調(diào)用。 修復(fù)代碼的步驟會一次又一次地執(zhí)行新值。 還必須設(shè)置判斷遞歸調(diào)用何時結(jié)束的標(biāo)準(zhǔn)。 在下面的例子中,演示如何使用二進(jìn)制搜索的遞歸方法。采用一個排序列表,并將其索引范圍作為遞歸函數(shù)的輸入。
使用遞歸進(jìn)行二進(jìn)制搜索
使用python實(shí)現(xiàn)二進(jìn)制搜索算法,如下所示。 我們使用有序的項(xiàng)目列表,并設(shè)計一個遞歸函數(shù),將起始索引和結(jié)束索引作為輸入列表。 然后二進(jìn)制搜索函數(shù)自行調(diào)用,直到搜索到項(xiàng)目或在列表中結(jié)束。
參考以下代碼實(shí)現(xiàn) -
def bsearch(list, idx0, idxn, val):
if (idxn < idx0):
return None
else:
midval = idx0 + ((idxn - idx0) // 2)
# Compare the search item with middle most value
if list[midval] > val:
return bsearch(list, idx0, midval-1,val)
elif list[midval] < val:
return bsearch(list, midval+1, idxn, val)
else:
return midval
list = [8,11,24,56,88,131]
print(bsearch(list, 0, 5, 24))
print(bsearch(list, 0, 5, 51))
執(zhí)行上面示例,得到以下結(jié)果 -
2
None