1 遞迴呼叫
2 二分法
遞迴呼叫:在呼叫乙個函式的過程中,直接或者間接又呼叫該函式本身,稱之為遞迴呼叫
遞迴必備的兩個階段:1、遞推 2、回溯
#salary(5)=salary(4)+300
#salary(4)=salary(3)+300
#salary(3)=salary(2)+300
#salary(2)=salary(1)+300
#salary(1)=100##
salary(n)=salary(n-1)+300 n>1
#salary(1) =100 n=1
defsalary(n):
if n == 1:
return 100
return salary(n-1)+300
print(salary(5))
#python中的遞迴python中的遞迴效率低,需要在進入下一次遞迴時保留當前的狀態,在其他語言中可以有解決方法:尾遞迴優化,即在函式的最後一步(而非最後一行)呼叫自己,尾遞迴優化:但是python又沒有尾遞迴,且對遞迴層級做了限制#總結遞迴的使用:1. 必須有乙個明確的結束條件2. 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少3. 遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)
importsyssys.getrecursionlimit()
sys.setrecursionlimit(2000)
n=1def
test():
global
n
(n) n+=1test()
test() #
雖然可以設定,但是因為不是尾遞迴,仍然要儲存棧,記憶體大小一定,不可能無限遞迴
l=[1,2,10,30,33,99,101,200,301,402] #從小到大排列的數字列表
defbinary_search(l,num):
(l)
if len(l) ==0:
print('
not exists')
return
mid_index=len(l) // 2
if num > l[mid_index]: #
往右找 binary_search(l[mid_index+1:],num)
elif num < l[mid_index]: #
往左找binary_search(l[0:mid_index],num)
else
:
print('
find it')
#binary_search(l,301)
binary_search(l,302)
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...