遞迴呼叫 二分法

2022-06-26 16:33:15 字數 1650 閱讀 2637

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)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)
import

syssys.getrecursionlimit()

sys.setrecursionlimit(2000)

n=1def

test():

global

n

print

(n) n+=1test()

test() #

雖然可以設定,但是因為不是尾遞迴,仍然要儲存棧,記憶體大小一定,不可能無限遞迴

l=[1,2,10,30,33,99,101,200,301,402] #

從小到大排列的數字列表

defbinary_search(l,num):

print

(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...