国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python遞歸函數(shù)定義與用法示例

2020-02-16 01:38:02
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python遞歸函數(shù)定義與用法。分享給大家供大家參考,具體如下:

遞歸函數(shù)

在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)。

舉個(gè)例子,我們來計(jì)算階乘 n! = 1 * 2 * 3 * ... * n,用函數(shù) fact(n)表示,可以看出:

fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n

所以,fact(n)可以表示為 n * fact(n-1),只有n=1時(shí)需要特殊處理。
于是,fact(n)用遞歸的方式寫出來就是:

def fact(n):if n==1:  return 1return n * fact(n - 1)

上面就是一個(gè)遞歸函數(shù)。可以試試:

>>> fact(1)1>>> fact(5)120>>> fact(100)93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L

如果我們計(jì)算fact(5),可以根據(jù)函數(shù)定義看到計(jì)算過程如下:

===> fact(5)===> 5 * fact(4)===> 5 * (4 * fact(3))===> 5 * (4 * (3 * fact(2)))===> 5 * (4 * (3 * (2 * fact(1))))===> 5 * (4 * (3 * (2 * 1)))===> 5 * (4 * (3 * 2))===> 5 * (4 * 6)===> 5 * 24===> 120

遞歸函數(shù)的優(yōu)點(diǎn)是定義簡單,邏輯清晰。理論上,所有的遞歸函數(shù)都可以寫成循環(huán)的方式,但循環(huán)的邏輯不如遞歸清晰。

使用遞歸函數(shù)需要注意防止棧溢出。在計(jì)算機(jī)中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,每當(dāng)進(jìn)入一個(gè)函數(shù)調(diào)用,棧就會(huì)加一層棧幀,每當(dāng)函數(shù)返回,棧就會(huì)減一層棧幀。由于棧的大小不是無限的,所以,遞歸調(diào)用的次數(shù)過多,會(huì)導(dǎo)致棧溢出。可以試試計(jì)算 fact(10000)。

def digui(n):  sum = 0  if n<=0:    return 1  else:    return n*digui(n-1)print(digui(5))

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新安县| 临洮县| 东阳市| 荣昌县| 南漳县| 肃宁县| 大化| 江山市| 留坝县| 石林| 彰化市| 定陶县| 隆德县| 忻城县| 苏尼特右旗| 科尔| 奇台县| 寿宁县| 望谟县| 安岳县| 泽库县| 泾川县| 望江县| 龙口市| 温州市| 旅游| 米脂县| 吉安市| 汽车| 施秉县| 奇台县| 抚宁县| 乌兰县| 绥中县| 当涂县| 从江县| 睢宁县| 昆山市| 离岛区| 南川市| 叙永县|