遞迴函式和二分法查詢

2022-08-10 21:36:17 字數 2001 閱讀 2294

一.遞迴函式

遞迴函式:在乙個函式裡在呼叫這個函式本身。

遞迴函式如果不受到外力的阻止會一直執行下去。但是我們之前已經說過關於函式呼叫的問題,每一次函式呼叫都會產生乙個屬於它自己的

命名空間,如果一直呼叫下去,就會造成命名空間占用太多記憶體的問題,於是python為了杜絕此類現象,強制的將遞迴層數控制在了997.

1

deffoo(n):

2print

(n)3 n += 1

4foo(n)

5 foo(1)

未報錯之前能看到的最大數字就是998.當然了,997是python為了我們程式的記憶體優化所設定的乙個預設值,我們當然還可以通過一些手段去

修改它:

1

import

sys2

print(sys.setrecursionlimit(設定遞迴的最大深度))

二.二分法查詢

二分查詢演算法也稱折半查詢,基本思想就是折半,和平時猜數字遊戲一樣,比如猜的數字時67,猜測範圍是0-100,則會先猜測中間值50,

結果小了,所以就會從50-100猜測,中間值為75,結果大了,又從50-75猜測中間值,一直到猜中為止。因此,二分查詢有乙個限制就是原先數

組需要是乙個有序陣列.

在列表l中查詢數字66: 

l = [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]

具體思考流程如下:

找不到'

)12 func(l,66)

1314 執行結果:bingo 0

view code

為什麼沒有找到66的索引呢?因為在比較得到比目標數大或者小的切片後,實際上是改變了目標的索引,切到最後只會出現0和1兩種情況,說明上

述**實現不了查詢,需要優化.

1 l1 = [1, 2, 4, 5, 7, 9]

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

3 end = len(l)-1 if end is none else

end4 mid_index = (end - start) // 2 +start

5if end >=start:

6if aim >l[mid_index]:

7return two_search(l,aim,start=mid_index+1,end=end)89

elif aim

10return two_search(l,aim,start=start,end=mid_index-1)

1112

elif aim ==l[mid_index]:

13return

mid_index

14else:15

return

'沒有此值'16

else:17

return

'沒有此值'18

print(two_search(l1,9))

view code

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

遞迴二分法查詢

二分法使用了折半查詢的思想,不斷的變化,陣列下標的起始位置 begin 和終止位置 end 來進行搜尋。我們使用兩種演算法,解決二分查詢 public class solution system.out.println solution.sort number,0,number.length,56 ...

二分法查詢 遞迴

需求 查詢陣列中某個元素的下標 實現方法 二分法查詢 折半查詢,每次把錶分成兩半,因為已經排好序,所以每次只需要和中間的數比較,就能確定要查詢的值在哪一半,然後不斷分成兩半,直到匹配,如果沒有找到,則表示沒有該元素 public static int find int x int min 0 int...