1.递归法
factorial(n)
定义为:如果 n
为 0,则返回 1(因为 0! = 1);否则,返回 n
乘以 factorial(n-1)
。
对于熟悉递归的人来说,递归方法更容易理解,因为它直接映射了问题的定义阶乘函数;但递归每次调用都会增加一层栈帧,如果输入的 n
很大(例如 n > 1000
),可能会导致栈溢出(RecursionError
),因此并不推荐这种方法。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
# 示例
n = 5
print(f"{n} 的阶乘是 {factorial(n)}")
2.迭代法
阶乘函数 factorial(n)
定义为:从 1 开始,逐步乘以从 1 到 n
的所有整数。
迭代方法避免了递归调用的开销,直接通过循环完成计算,通常比递归方法更快,因此在其他语言中更推荐迭代法。
def factorial(n):
result = 1
for i in range(1, n+1):
result *= i
return result
# 示例
n = 5
print(f"{n} 的阶乘是 {factorial(n)}")
3.math库函数调用法
既然是在Python中求阶乘,那么我更推荐这一种方法。Python 的标准库 math
提供了一个内置的阶乘函数 math.factorial(),它
使用了优化的算法,能够快速计算阶乘,尤其是在处理大数时;不仅不会导致栈溢出,并且经过了严格的测试,可靠性更高;我们直接调用库函数,使代码更简洁,减少了出错的可能性。
import math
# 示例:计算 10000 的阶乘
n = 10000
result = math.factorial(n)
print(f"{n} 的阶乘是 {result}")