基礎概念
遞迴:在函式內部呼叫自身
遞迴與迭代的相同:都是一種函式的不斷迴圈,每迴圈一次,減少一次解決問題的規模不同: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...