首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 遞迴計算階乘 (N!) 實作

     編輯:更多程式設計知識

階乘 N! = N × (N-1) × ... × 1,0! = 1。遞迴定義自然對應數學歸納:

遞迴實作


def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

執行範例


for i in range(6):
    print(f"{i}! = {factorial(i)}")
# 0! = 1
# 1! = 1
# 2! = 2
# 3! = 6
# 4! = 24
# 5! = 120

遞迴深度限制

Python 預設遞迴上限 1000,計算 1000! 會觸發 RecursionError。解決:

  • 改用迴圈:reduce(operator.mul, range(1, n+1), 1) 或 math.factorial。
  • 增加上限:sys.setrecursionlimit(2000) (謹慎使用)。

尾遞迴優化 (Python 不支援)


def fact_tail(n, acc=1):
    if n == 0:
        return acc
    return fact_tail(n-1, n*acc)  # Python 不會優化,仍會堆疊

效能比較

方法時間複雜度空間複雜度備註
遞迴O(N)O(N)堆疊溢位風險
迴圈O(N)O(1)推薦生產環境
math.factorialO(N log N)O(1)C 實作,最快

遞迴階乘適合教學展示遞迴概念,實務請用 math.factorial。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved