概述
遞迴函式即直接或間接呼叫自身的函式,且遞迴過程中必須有乙個明確的遞迴結束條件,稱為遞迴出口。遞迴極其強大一點就是能夠遍歷任意的,不可預知的程式的結構,比如遍歷複雜的巢狀列表。
www.cppcns.com
遞迴求和
我們可以利用遞迴函式實現乙個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這種處理方式看似複雜,我們可能更多會利用迴圈語句替代,但是使用遞程式設計客棧歸函式邏輯簡單清晰,這是使用的一大優點。
總結本文標題: python3基礎教程之遞迴函式簡單示例
本文位址: /jiaoben/python/261876.html
python3 基礎教程
一 基礎語法 1.多行語句 在 或 中的多行語句,不需要使用反斜槓 例如 total item one item two item three item four item five 2.空行 函式之間或類的方法之間用空行分隔,表示一段新的 的開始。類和函式入口之間也用一行空行分隔,以突出函式入口的...
python3基礎教程筆記
問題 unicode和utf 8和assci之間的關係 列表元素拼接 join lst 列表方法 增 lst.insert 3,n 插入 刪lst.clear 清空 lst.pop 末尾刪 lst.remove a 刪除第乙個指定元素 複製 b lst.copy 數數 lst.count n 擴充套...
python基礎教程之Hello World
python命令列 假設你已經安裝好了python,那麼在linux命令列輸入程式設計客棧 複製 如下 python 將直接進入python。後面輸入 複製 如下 print hello world 可以看到,隨後在螢幕上輸出 複製 如下 hello world print是乙個常用函式,其功能就是...