課程內(nèi)容
Python入門(mén)課程N(yùn)O61課 遞歸函數(shù)
所謂的遞歸函數(shù),是指自己調(diào)用自己的函數(shù)。這里的調(diào)用不一定是直接調(diào)用,也可以是間接地調(diào)用。舉例說(shuō)明:
但這樣自身不斷的調(diào)用自身會(huì)陷入死循環(huán)當(dāng)中,無(wú)法結(jié)束,因此python會(huì)拋出一個(gè)錯(cuò)誤,指示該遞歸函數(shù)已超出了最大遞歸深度。因此
遞歸函數(shù)必須能夠正常終止
在設(shè)計(jì)遞歸函數(shù)時(shí),必須定義一個(gè)退出邊界,否則函數(shù)會(huì)不斷地遞歸執(zhí)行,一旦超出Python語(yǔ)言所支持的遞歸深度,那么就會(huì)拋出RecursionError的錯(cuò)誤異常。我們可以在函數(shù)體中使用控制語(yǔ)句加一段控制邏輯,當(dāng)遞歸函數(shù)在條件不滿(mǎn)足時(shí)就終止遞歸。我們將上面的遞歸函數(shù)進(jìn)行修改來(lái)輸出1-10之間的整數(shù),如下:
遞歸函數(shù)高級(jí)用法:返回值
遞歸函數(shù)較非遞歸函數(shù),會(huì)更難理解,在熟練掌握了遞歸函數(shù)的用法以后,可以寫(xiě)出更加簡(jiǎn)潔的代碼。比如計(jì)算幾個(gè)數(shù)字的和:
接下來(lái)我們進(jìn)行講解:
代碼最外層是一個(gè)三元運(yùn)算結(jié)構(gòu):return 0 if not numbers。這段代碼表示,如果參數(shù)numbers為空,就返回0。
接下來(lái)是調(diào)用自己else numbers[-1]+qiuhe(numbers[0:len(numbers)-1]),列表numbers非空,那么就先取出列表最后一個(gè)元素:numbers[-1]然后對(duì)列表進(jìn)行切片,再將切片后的列表作為參數(shù)傳遞給qiuhe函數(shù):同學(xué)們注意這個(gè)切片的語(yǔ)法,每次切片都將尾部的元素排除。最后將取出的尾部元素,與遞歸函數(shù)的返回值進(jìn)行相加:numbers[-1]+accumulate(numbers[0:len(numbers)-1])
遞歸函數(shù)的劣勢(shì):
在定義遞歸函數(shù)的時(shí)候必須設(shè)計(jì)函數(shù)的邊界條件,一旦超出邊界,就終止遞歸,否則遞歸函數(shù)會(huì)不斷地執(zhí)行,不斷地消耗系統(tǒng)資源,直至被系統(tǒng)kill。

- 上一篇
Python入門(mén)課程N(yùn)O60課 函數(shù)裝飾器
裝飾器是一種軟件設(shè)計(jì)模式,可以對(duì)已有的對(duì)象進(jìn)行功能上的擴(kuò)展,而無(wú)需改變其結(jié)構(gòu)。如何使用裝飾器來(lái)進(jìn)行功能上的擴(kuò)展?我們得先學(xué)習(xí)Python中的閉包函數(shù)。閉包函數(shù):簡(jiǎn)單地理解,就是函數(shù)中定義的一個(gè)內(nèi)部函數(shù),該內(nèi)部函數(shù)可以訪問(wèn)外部函數(shù)作用域中的參數(shù),變量。使用閉包進(jìn)行
- 下一篇
Python入門(mén)課程N(yùn)O62課 內(nèi)置函數(shù)之?dāng)?shù)學(xué)運(yùn)算函數(shù)
內(nèi)置函數(shù)是在Python中預(yù)先編寫(xiě)好的一些基礎(chǔ)函數(shù),可以直接拿來(lái)使用,無(wú)需再額外編寫(xiě)代碼。python官網(wǎng)有所有的內(nèi)置函數(shù):在本節(jié)課中,我們主要講解一些再實(shí)際應(yīng)用中經(jīng)常使用的函數(shù)。接下來(lái)講解數(shù)學(xué)運(yùn)算函數(shù)。計(jì)算絕對(duì)值abs(x): 返回?cái)?shù)參數(shù)x的絕對(duì)值。參數(shù)x必須是數(shù)值類(lèi)型或能