1. 遞迴
自己呼叫自己
遞迴的入口(引數) 和 出口(return)
樹形結構的遍歷
importosdef
func(lujing, n):
lst = os.listdir(lujing) #
開啟資料夾,列出所有檔案
for el in lst: #
el 每乙個檔案
path = os.path.join(lujing, el) #
還原路徑
if os.path.isdir(path): #
判斷是否是資料夾
print('
\t'*n ,el)
func(path, n + 1)
else
:
print('
\t' *n, el)
func(r
'e:\python_workspace_s18
', 0)
2. 二分法
掐頭結尾取中間
查詢效率非常的高
#二分法lst = [1, 3, 5, 7, 13, 15, 17, 19, 21, 23, 27, 29, 31, 33, 39, 41, 43, 47, 49]
left =0
right = len(lst) - 1count = 1n = int(input("
請輸入乙個數:"))
while left <=right:
middle = (left + right) // 2
if n >lst[middle]:
left = middle + 1
elif n right = middle - 1
else
:
print('
找到了'
)
print('
迴圈次數為:%s
' %count)
break
count += 1
else
:
print('
不存在')#
遞迴實現:
lst = [1, 3, 5, 7, 13, 15, 17, 19, 21, 23, 27, 29, 31, 33, 39, 41, 43, 47, 49]
deffunc(s, lst):
left =0
right = len(lst) - 1
if lst !=:
middle = (left + right) //2
if n >lst[middle]:
left = middle + 1lst =lst[left:]
func(s, lst)
elif n right = middle -1lst =lst[:right]
func(s, lst)
else
:
print('
找到了'
)
return
else
:
print('
沒有找到')
return
n = int(input('
請輸入乙個數:'))
func(n, lst)
#遞迴二
lst = [1, 3, 5, 7, 13, 15, 17, 19, 21, 23, 27, 29, 31, 33, 39, 41, 43, 47, 49]
deffunc(n, lst, left, right):
if left <=right:
middle = (left + right) // 2
if n >lst[middle]:
left = middle + 1
return
func(n, lst, left, right)
elif n right = middle - 1
return func(n, lst, left, right) #
遞迴如果有返回值. 所有呼叫遞迴的地方必須寫return
else
:
print("
找到了"
)
return
middle
else
:
print('
沒有找到')
return -1n = int(input('
請輸入乙個數:'))
func(n,lst,0,len(lst)-1)
python 遞迴與二分法
一 遞迴呼叫的定義 遞迴呼叫是函式巢狀呼叫的一種特殊形式,函式在呼叫時,直接或間接呼叫了自身,就是遞迴呼叫二 遞迴分為兩個階段 遞推,回溯 salary 5 salary 4 300 salary 4 salary 3 300 salary 3 salary 2 300 salary 2 salar...
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...
python基礎 遞迴與二分法
一般換做巢狀函式換做自己執行自己 1,必須有乙個明確的結束條件 2,每次進入新一層遞迴時,問題規模比上次遞迴都應有所減少 3,效率不高,層次過多導致棧溢位 所以,要寫遞迴函式主要邏輯必需不斷呼叫,而遇到if 條件必須終止 二分法 data 1,3,6,7,9,12,14,16,17,18,20,21...