函式7 遞迴

2022-09-16 17:06:17 字數 1669 閱讀 6975

基礎概念

遞迴:在函式內部呼叫自身
遞迴與迭代的相同:都是一種函式的不斷迴圈,每迴圈一次,減少一次解決問題的規模

不同:1.遞迴利用了棧的先進後出的概念,即將第一次執行的結果放入棧底,最後一次遞迴的結果放入棧頂,

再根據需要依次從棧頂取結果進行運算

2.遞迴:我們並不知道遞迴的次數,只需要規定遞迴結束的條件

迭代:有乙個確切的迭代次數,並且迭代完成自動停止

遞迴 二分法

1.必須有乙個明確的結束條件

2.每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少

3.遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫

棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)

#用迴圈實現階乘

# j = 1

# n = int(input('n>>:'))

# while n != 1:

# j *= n

# n -= 1

# print(j)

#用遞迴實現階乘

# def jiecheng(n):

# if n == 1:

# return n

# return n*jiecheng(n-1)

# print(jiecheng(5))

#遞迴問年齡的問題:

# def age(n):

# if n == 1:

# return 10

# else:

# return age(n-1)+2

#函式第一次的執行結果依賴第二次執行的結果,只有得到最後一次的執行結果,才能返回遞迴函式的結果

#從以下列表中找到特定的某個值,

# 當列表無窮大時,使用迴圈佔記憶體,使用迭代效率低,這時就可以使用遞迴函式,極大的提高查詢效率

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def search(num,data):

print(data)

if len(data) > 1:

if num > data[len(data)//2]:

return search(num,data[len(data)//2:])

elif num < data[len(data)//2]:

return search(num,data[:len(data)//2])

else:

print('find')

return '結果'

else:

if num == data[0]:

print('find it')

else:

print('no exit')

print(search(19,data))

#若最後遞迴的結果要逐步往回返,函式每次遞迴的結果都要寫return值,因為每次函式執行依賴下次執行的結果

#若最後遞迴的結果正是函式想要的結果,則不需要寫return值

7 匿名函式 函式作用域 遞迴函式 閉包

filter lambda x x 10,li 語法規則 lambda 引數 表示式 簡單的函式,可以不用使用def定義乙個函式,使用匿名函式即可 函式呼叫,類似於filter map等函式裡面,可以使用匿名函式來處理 提高開發效率,匿名函式的合理利用能夠讓那個 更加簡潔 print lambda ...

自學python筆記7 函式引數與遞迴函式

函式引數 def power x return x x print power 10 def power x,n 2 n 2為設定的預設引數,預設引數應設定為不變數,如設定成可變數,則每次呼叫結束,如果該引數變了,下次呼叫也跟著變了 sum 1 while n 0 sum sum x n n 1 r...

7 Python基礎 OS模組和函式遞迴

1.給定檔案路徑,深層獲取該路徑下所有檔案和資料夾,並甄別出檔案與資料夾的不同,在輸出結果中給與說明。import os def list all files my path r e python project1 定義返回值列表 all dir file 先找到該路徑的中的內容 my list o...