python之遞迴與二分法

2022-04-20 09:11:30 字數 2366 閱讀 3359

1. 遞迴

自己呼叫自己

遞迴的入口(引數) 和 出口(return)

樹形結構的遍歷 

import

osdef

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