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

首頁 > 編程 > Python > 正文

Python遞歸函數定義與用法示例

2020-01-04 17:15:57
字體:
來源:轉載
供稿:網友

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

遞歸函數

在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。

舉個例子,我們來計算階乘 n! = 1 * 2 * 3 * ... * n,用函數 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時需要特殊處理。
于是,fact(n)用遞歸的方式寫出來就是:

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

上面就是一個遞歸函數。可以試試:

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

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

===> 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

遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。

使用遞歸函數需要注意防止棧溢出。在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出。可以試試計算 fact(10000)。

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

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荆州市| 安庆市| 莎车县| 天等县| 新乐市| 景德镇市| 四子王旗| 安义县| 海南省| 吉安县| 堆龙德庆县| 新巴尔虎右旗| 景东| 定结县| 衢州市| 黄骅市| 赤水市| 抚远县| 水城县| 左权县| 桂平市| 湘西| 靖宇县| 揭西县| 独山县| 黄平县| 延寿县| 龙陵县| 敖汉旗| 淮安市| 龙口市| 武鸣县| 社旗县| 新宁县| 尤溪县| 张北县| 清涧县| 大港区| 蓝山县| 科尔| 东山县|