1. 程式人生 > >python學習之-函式的地遞迴

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')

 

函式遞迴的圖示