函數就像一個盒子,將相關的一些功能打包成一個函數,以便呼叫。函數內部可以呼叫其他函數,也可以呼叫這個函數本身。
如果一個函數在內部呼叫函數自身,那麼這個就是遞歸函數。
我們舉一個簡單的例子。
數學中我們知道100的階乘,100!=1009998...321.
分解開來,100!=10099!,99!=9998!,98!=98*97!...
那麼我們定義一個函數來計算階乘:
def fact(n): return n*fact(n-1)
上面這個函數看起來是一個數字不斷地跟與它小1的數相乘,卻沒有停止的時候。所以我們必須對上述函數進行改造,讓它能在n=1的時候,計算完就停下來。
def fact(n): if n==0: return 1 else: return n*fact(n-1)
遞歸函數也可以用循環的方式實現。但是遞歸函數邏輯較為簡單。但是在使用遞歸函數的時候,要注意防止遞歸函數呼叫過多導致棧溢位。