Python3之遞迴函式簡單示例
概述
遞迴函式即直接或間接呼叫自身的函式,且遞迴過程中必須有一個明確的遞迴結束條件,稱為遞迴出口。遞迴極其強大一點就是能夠遍歷任意的,不可預知的程式的結構,比如遍歷複雜的巢狀列表。
遞迴求和
我們可以利用遞迴函式實現一個Python內建函式sum()
的遞迴版。
# 遞迴
def d_sum(L):
if not L:
return 0
else:
return L[0] + d_sum(L[1:])
sum_l = d_sum(range(10))
print(sum_l)
示例結果
45
該遞迴函式怎麼實現列表元素相加的呢? 我們知道函式是有本地作用域的,對函式呼叫的每一個開啟的時候,在執行時呼叫堆疊上都有自己的一個本地作用域的副本,即L在每個層級都是不同的,比如我們可以透過每次呼叫時新增一個列印語句,更加直觀展示每個層級L的情況
# 遞迴
def d_sum(L):
# 列印該層級L
print(L)
if not L:
return 0
else:
return L[0] + d_sum(L[1:])
# 構建 0-10 數字元素列表
L = [i for i in range(10)]
sum_l = d_sum(L)
print(sum_l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
[6, 7, 8, 9]
[7, 8, 9]
[8, 9]
[9]
[]
45
處理任意結構
比如我們可以利用遞迴計算一個巢狀的子列表結構中所有數字的總和
def dd_sum(L):
tot = 0
for x in L:
if not isinstance(x, list):
tot += x
else:
tot += dd_sum(x)
return tot
# 巢狀列表
L = [1,[2,3],[4,[5,6,7],8],9]
sum_l = dd_sum(L)
print(sum_l)
示例結果:
45
這種處理方式看似複雜,我們可能更多會利用迴圈語句替代,但是使用遞迴函式邏輯簡單清晰,這是使用的一大優點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4822/viewspace-2823042/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 函式之遞迴函式遞迴
- 遞迴函式遞迴函式
- 遞迴示例-展開編號(Excel函式集團)遞迴Excel函式
- JavaScript之遞迴的簡單使用JavaScript遞迴
- 函式表示式–遞迴函式遞迴
- 函式的遞迴函式遞迴
- 測開之函式進階· 第1篇《遞迴函式》函式遞迴
- Python 函式進階-遞迴函式Python函式遞迴
- 函式遞迴與生成式函式遞迴
- 1.5.6 python遞迴函式Python遞迴函式
- 13.0、python遞迴函式Python遞迴函式
- 遞迴函式的理解遞迴函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- day 17 – 1 遞迴函式遞迴函式
- 遞迴函式-樹形列表遞迴函式
- 遞迴函式例項大全遞迴函式
- 初學 PHP 函式的遞迴PHP函式遞迴
- GO語言————6.6 遞迴函式Go遞迴函式
- [20180531]函式呼叫與遞迴.txt函式遞迴
- bilibiliclass10and11_函式遞迴函式遞迴
- C#語言函式遞迴C#函式遞迴
- Python簡單函式迴圈綜合例項Python函式
- Python3之函式的引數傳遞與引數定義Python函式
- 簡單的加減乘除(遞迴)遞迴
- 遞迴函式,可變引數列表遞迴函式
- web前端教程之JavaScript學習筆記之遞迴函式Web前端JavaScript筆記遞迴函式
- 課時22:函式:遞迴是神馬函式遞迴
- 假如我們把函式都改成遞迴...函式遞迴
- 編寫函式:遞迴求逆序 (Append Code) ★函式遞迴APP
- (011)我們一起學Python;匿名函式,遞迴函式Python函式遞迴
- 遞迴、三元表示式、生成式(列表,字典)、匿名函式遞迴函式
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- Python3之從遞迴到閉包再到裝飾器Python遞迴
- 『無為則無心』Python函式 — 32、遞迴Python函式遞迴
- 常見函式之單行函式函式
- 好程式設計師Python教程系列遞迴函式與匿名函式呼叫程式設計師Python遞迴函式
- 遞迴匿名函式手動實現 http_build_query 系統函式遞迴函式HTTPUI