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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 函式之遞迴函式遞迴
- 遞迴函式遞迴函式
- Python函式簡單示例Python函式
- jquery函式$.proxy簡單示例jQuery函式
- JavaScript之遞迴的簡單使用JavaScript遞迴
- 遞迴示例-展開編號(Excel函式集團)遞迴Excel函式
- 函式表示式–遞迴函式遞迴
- 函式的遞迴函式遞迴
- JavaScript 函式遞迴JavaScript函式遞迴
- php遞迴函式PHP遞迴函式
- 函式遞迴與生成式函式遞迴
- 測開之函式進階· 第1篇《遞迴函式》函式遞迴
- 遞迴函式的理解遞迴函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- ORACLE單行函式與多行函式之四:日期函式示例Oracle函式
- ORACLE單行函式與多行函式之六:通用函式示例Oracle函式
- Python 函式進階-遞迴函式Python函式遞迴
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- ORACLE單行函式與多行函式之五:轉換函式示例Oracle函式
- 1.5.6 python遞迴函式Python遞迴函式
- 13.0、python遞迴函式Python遞迴函式
- day 17 – 1 遞迴函式遞迴函式
- 遞迴函式例項大全遞迴函式
- 遞迴函式-樹形列表遞迴函式
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- 遞迴的簡單應用遞迴
- 初學 PHP 函式的遞迴PHP函式遞迴
- C#語言函式遞迴C#函式遞迴
- GO語言————6.6 遞迴函式Go遞迴函式
- 直觀理解(尾)遞迴函式遞迴函式
- Python簡單函式迴圈綜合例項Python函式
- javascript遞迴概念簡單介紹JavaScript遞迴
- 簡單的加減乘除(遞迴)遞迴
- 遞迴函式,可變引數列表遞迴函式
- JavaScript 中匿名函式的遞迴呼叫JavaScript函式遞迴
- web前端教程之JavaScript學習筆記之遞迴函式Web前端JavaScript筆記遞迴函式
- js函式引數值傳遞和引用傳遞簡單介紹JS函式
- Python3之函式的引數傳遞與引數定義Python函式