二分查詢的遞迴實現

2021-09-27 07:55:35 字數 1586 閱讀 3000

寫程式的思路:

1.如果要查詢的值等於中位數 target=mid,就查詢成功,返回true

2.如果要查詢的值小於中位數 targetmid,就在中位數的右邊 alist[mid + 1:] 進行查詢

**如下:

def binary_search_2(alist, target):

"""二分查詢 遞迴方式"""

n = len(alist)

if n == 0:

return false

mid = n // 2 # " // " 表示整數除法,返回不大於結果的乙個最大的整數

if alist[mid] == target:

return true

elif target < alist[mid]:

return binary_search_2(alist[:mid], target)

else:

return binary_search_2(alist[mid + 1:], target)

def main():

'''主函式

'''#輸入數列時不要用空格隔開,只能是輸入123569,否則輸出的都是false

alist_str = input('請輸入排序好的數列:') # 二分查詢的數列是已經排序好了的

alist = list(alist_str)

target = input('請輸入要查詢的值:')

print(binary_search_2(alist, target))

if __name__ == '__main__': # 呼叫主函式

main()

舉例執行:

其實去掉主函式框架也是可以的:

def binary_search_2(alist, target):

"""二分查詢 遞迴方式"""

n = len(alist)

if n == 0:

return false

mid = n // 2 # " // " 表示整數除法,返回不大於結果的乙個最大的整數

if alist[mid] == target:

return true

elif target < alist[mid]:

return binary_search_2(alist[:mid], target)

else:

return binary_search_2(alist[mid + 1:], target)

#輸入數列時不要用空格隔開,只能是輸入123569,否則輸出的都是false

alist_str = input('請輸入排序好的數列:') # 二分查詢的數列是已經排序好了的

alist = list(alist_str)

target = input('請輸入要查詢的值:')

print(binary_search_2(alist, target))

二分查詢(遞迴實現)

include include intk int binarysearch int a,int x,int low,int high a表示需要二分的有序陣列 公升序 x表示需要查詢的數字,low,high表示高低位 int mid low high 2 if x a mid 找到x else if...

遞迴實現二分查詢

回文是一種字串,它正著讀和反著讀都是一樣的。比如level,eye都是回文。用迭代的方法可以很快地判斷乙個字串是否為回文。用遞迴的方法如何來實現呢?首先我們要考慮使用遞迴的兩個條件 include iostream include include string define max 100 usin...

二分查詢的遞迴實現

二分查詢又叫做折半查詢,具體的查詢流程如下 查詢的前提是待查詢序列是公升序的。1 演算法流程 a.使用目標元素與樣本數列 公升序 中的中間元素比較大小,若相等則表示查詢成功 b.若目標元素小於中間元素,則應該去中間元素的左邊進行查詢 c.若目標元素大於中間元素,則應該去中間元素的右邊進行查詢 d.重...