# Python 遞歸函數
> 原文: [https://thepythonguru.com/python-recursive-functions/](https://thepythonguru.com/python-recursive-functions/)
* * *
于 2020 年 1 月 7 日更新
* * *
函數本身調用時稱為遞歸。 遞歸的工作原理類似于循環,但有時使用遞歸比循環更有意義。 您可以將任何循環轉換為遞歸。
這是遞歸的工作方式。 遞歸函數會自行調用。 如您所料,如果不因某種條件而停止,則此過程將無限期重復。 此條件稱為基本條件。 每個遞歸程序中都必須有一個基本條件,否則它將像無限循環一樣永遠繼續執行。
遞歸函數的工作原理概述:
1. 遞歸函數由一些外部代碼調用。
2. 如果滿足基本條件,則程序執行有意義的操作并退出。
3. 否則,函數將執行一些必需的處理,然后調用自身以繼續遞歸。 這是用于計算階乘的遞歸函數的示例。
階乘由數字表示,后跟(`!`)符號,即`4!`。
例如:
```py
4! = 4 * 3 * 2 * 1
2! = 2 * 1
0! = 1
```
這是一個例子
```py
def fact(n):
? ? if n == 0:
? ? ? ? return 1
? ? else:
? ? ? ? return n * fact(n-1)
print(fact(0))
print(fact(5))
```
**預期輸出**:
```py
1
120
```
```py
def fact(n):
if n == 0:
return 1
else:
return n * fact(n-1)
print(fact(0))
print(fact(5))
```
現在嘗試執行上述函數:
```py
print(fact(2000))
```
你會得到:
```py
RuntimeError: maximum recursion depth exceeded in comparison
```
發生這種情況是因為默認情況下 python 在`1000`調用之后停止了調用遞歸函數。 若要更改此行為,您需要按如下所示修改代碼。
```py
import sys
sys.setrecursionlimit(3000)
def fact(n):
? ? if n == 0:
? ? ? ? return 1
? ? else:
? ? ? ? return n * fact(n-1)
print(fact(2000))
```
```py
import sys
sys.setrecursionlimit(3000)
def fact(n):
? ? if n == 0:
? ? ? ? return 1
? ? else:
? ? ? ? return n * fact(n-1)
print(fact(2000))
```
* * *
* * *
- 初級 Python
- python 入門
- 安裝 Python3
- 運行 python 程序
- 數據類型和變量
- Python 數字
- Python 字符串
- Python 列表
- Python 字典
- Python 元組
- 數據類型轉換
- Python 控制語句
- Python 函數
- Python 循環
- Python 數學函數
- Python 生成隨機數
- Python 文件處理
- Python 對象和類
- Python 運算符重載
- Python 繼承與多態
- Python 異常處理
- Python 模塊
- 高級 Python
- Python *args和**kwargs
- Python 生成器
- Python 正則表達式
- 使用 PIP 在 python 中安裝包
- Python virtualenv指南
- Python 遞歸函數
- __name__ == "__main__"是什么?
- Python Lambda 函數
- Python 字符串格式化
- Python 內置函數和方法
- Python abs()函數
- Python bin()函數
- Python id()函數
- Python map()函數
- Python zip()函數
- Python filter()函數
- Python reduce()函數
- Python sorted()函數
- Python enumerate()函數
- Python reversed()函數
- Python range()函數
- Python sum()函數
- Python max()函數
- Python min()函數
- Python eval()函數
- Python len()函數
- Python ord()函數
- Python chr()函數
- Python any()函數
- Python all()函數
- Python globals()函數
- Python locals()函數
- 數據庫訪問
- 安裝 Python MySQLdb
- 連接到數據庫
- MySQLdb 獲取結果
- 插入行
- 處理錯誤
- 使用fetchone()和fetchmany()獲取記錄
- 常見做法
- Python:如何讀取和寫入文件
- Python:如何讀取和寫入 CSV 文件
- 用 Python 讀寫 JSON
- 用 Python 轉儲對象