1. 程式人生 > 其它 >python 遞迴

python 遞迴

遞迴

  遞迴(Recursion Algorithm, 遞迴演算法)通過重複將問題分解為同類子問題而解決問題的方法。

  遞迴思想:  

  1. “重複”,即凡是通過迴圈語句可以實現的,都可以通過遞迴來實現
  2. “將問題分解為同類的子問題”,如持續迴圈的運算操作,持續迴圈的判斷操作,他們的每次迴圈都是同樣的一個“動作”,這個“動作”就是一個子問題。

e.g.1:

 1 # -*- ecoding: utf-8 -*-
 2 # @ModuleName: rasum
 3 # @Function: 
 4 # @Author: Zhangjie
 5 # @Time: 2021/8/23 23:58
 6
7 def ra_sum(start): 8 if start == 1: 9 return start 10 order = ra_sum(start-1) + start 11 print("第%d次遞迴" % start) 12 print('返回值:%d,在記憶體中的地址:%d' % (order, id(order))) 13 return order 14 15 16 #迴圈實現 17 def sum1(start): 18 i = 1 19 add = 0 20 while i <= start:
21 add = add + i 22 i += 1 23 return add 24 25 26 27 28 if __name__ == '__main__': 29 #print(sum1(6)) 30 print(ra_sum(6))

輸出結果:

第2次遞迴
返回值:3,在記憶體中的地址:52392096
第3次遞迴
返回值:6,在記憶體中的地址:52392144
第4次遞迴
返回值:10,在記憶體中的地址:52392208
第5次遞迴
返回值:15,在記憶體中的地址:52392288
第6次遞迴
返回值:21,在記憶體中的地址:52392384
21

從示例中可以看出:

  每遞迴一次,程式碼在記憶體中開闢新的儲存運算過程的地址空間,記錄運算過程。(你是否曾經有過中間值應該放哪裡的問題)

  遞迴演算法其實分縮小範圍求取結果的層層返回兩大步驟。

  遞迴的實質是呼叫棧的進棧,出棧操作過程。

  每遞迴呼叫自己一次就進棧一次,並在棧列表裡記錄呼叫的內容,每返回一次就是出棧彈出值的過程,並把值返回到上一個棧列表裡,最終求出結果。

  (棧的性質:先進後出,後進先出)

一圖勝千言

思考

1 遞迴演算法的複雜度

2 使用遞迴演算法實現二分查詢

3 如何使用Python內建裝飾器優化遞迴

轉載請註明出處