遞迴函式和二分查詢演算法

2022-07-17 11:09:09 字數 1445 閱讀 3453

在乙個函式裡又呼叫這個函式本身。

遞迴的最大深度:998

原因:遞迴函式如果不受外力的阻止會一直執行下去,每一次函式呼叫都會產生乙個屬於他自己的命名空間,如果一直呼叫下去,就會造成命名空間占用太多記憶體的問題,python為了杜絕此類現象,強制的將遞迴層數控制在了997。

我們可以通過一些手段修改這個預設值:

import

syssys.setrecursionlimit(1000)

遞迴示例:

利用遞迴迴圈求100以內的數的和:

二分查詢

l1 = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

#簡單版

deftwo_find(l,aim):

mid = (len(l)-1) // 2

ifl:

#print(mid)

if aim >l[mid]:

two_find(l[mid+1:],aim)

elif aim

two_find(l[:mid],aim)

elif aim ==l[mid]:

print

(mid)

else

:

print('

沒找到'

)two_find(l1,39)

#上面的方法因為索引一直在變,所以查不到確定的索引

#公升級版

def two_find(l,aim,start=0,end=none):

end = len(l) if end == none else

end mid = (end - start)//2 +start

if end >=start:

if aim >l[mid]:

two_find(l, aim, start=mid + 1, end=end)

elif aim

two_find(l, aim, start=start, end=mid - 1)

elif aim ==l[mid]:

print('

找到了,%s

' %mid)

else

:

print('

沒找到')

view code

二分查詢遞迴演算法

使用此演算法的前提是,要查詢的範圍為有序範圍。一組數 num 9 left mid right 步驟 1.left為最左端元素的下標,right為最右端元素的下標,mid為查詢區間的中間元素,key為要查詢的元素。2.當left right的時候,比較num mid 和key 1 num mid k...

二分查詢和遞迴的二分查詢

在乙個有序的陣列中查詢給定的資料項,把陣列衝中間分成兩半,然後看要查詢的資料項在陣列的哪一半,再次折半查詢。如下 public int find long searchkey else if lowerbound upperbound else private int recfind long se...

二分查詢演算法(遞迴 非遞迴)

二分查詢 binary search 先來個比較官方的解釋 二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如...