一.遞迴函式
遞迴函式:在乙個函式裡在呼叫這個函式本身。
遞迴函式如果不受到外力的阻止會一直執行下去。但是我們之前已經說過關於函式呼叫的問題,每一次函式呼叫都會產生乙個屬於它自己的
命名空間,如果一直呼叫下去,就會造成命名空間占用太多記憶體的問題,於是python為了杜絕此類現象,強制的將遞迴層數控制在了997.
1未報錯之前能看到的最大數字就是998.當然了,997是python為了我們程式的記憶體優化所設定的乙個預設值,我們當然還可以通過一些手段去deffoo(n):
2print
(n)3 n += 1
4foo(n)
5 foo(1)
修改它:
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]view code具體思考流程如下:
找不到'
)12 func(l,66)
1314 執行結果:bingo 0
為什麼沒有找到66的索引呢?因為在比較得到比目標數大或者小的切片後,實際上是改變了目標的索引,切到最後只會出現0和1兩種情況,說明上
述**實現不了查詢,需要優化.
1 l1 = [1, 2, 4, 5, 7, 9]view code2def 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))
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...