python學習之-函式的地遞迴
什麼是函式的遞迴
在呼叫一個函式的過程中又直接或者間接地呼叫該函式本身,稱之為函式的遞迴呼叫
遞迴的呼叫是有層級限制的。預設從0 -997
遞迴的用處
遞迴的本質就是迴圈,某些地方比迴圈方便,for迴圈取值方便,while迴圈是條件迴圈(受條件控制),而遞迴也是一個重複的過程,優勢只需要把控住在滿足什麼條件的情況下把回溯結束掉,簡單來說只要把控遞迴的結束條件
_________________
遞迴呼叫的基本形式
def foo():
print('from foo')
foo()
這就是遞迴的基本形態
__________________
函式遞迴必須滿足兩個條件:
1. 必須有一個明確的結束條件
2. 每進入下一層遞迴,問題的規模都應該有所減少
由上述兩個條件可以推匯出遞迴應該有兩個明確的階段:
1. 回溯: 一層一層地遞迴呼叫下去
2. 遞推: 在某一層結束掉遞迴,開始往回一層層地返回
例:遞迴的概念
回溯的概念:問一個人的年齡,他說我比後面的大2歲,再次問後面的你幾歲,他又說我比後面的大2歲,再去問他後面的,他說我比後面的大2歲,繼續問後面告訴我18歲(拿到結果了這就是明確的結束條件)
遞推:當第四個人告訴我18歲,那麼我從第四個人開始往前加2歲,直到得出第一個人的年齡是24(就是往回一個一個的推結果)
這個一層一層往下呼叫就是回溯,滿足一個結束條件後,一層一層往上返回的概念就是遞推
函式遞迴的例項
def age(n):
if n == 1:
return 18
return age(n-1) + 2
例:把列表中所有的值取出
list=[1,[2,[3,[4,[5,[6,[7,]]]]]]]
def func(l):
for item in l:
if type(item) is list: #如果是列表
func(item) #返回自身
else:
print(item) #不是列表則打印出來
func(list1)
PS:邏輯就是通過遞迴,判斷如果是列表則返回自身回到函式開始層,然後進行for迴圈,不是列表就是列印
例:數字列表按照從小大的順序排列
nums=[11,13,21,31,43,101,221,302,339,443]
find_num=444
for num in nums:
if num == find_num:
print('find it')
break
else:
print('not exist')
函式遞迴的圖示