032. 编写一个函数,计算一个数字的阶乘
在 Python 中,可以通过递归或迭代的方式来计算一个数字的阶乘。
方法 1:递归实现
递归方法是一种常见的实现阶乘的方式。阶乘的定义是:
-
n!=n×(n−1)×(n−2)×…×1
-
0!=1
递归实现的代码如下:
def factorial_recursive(n):
"""
使用递归计算数字 n 的阶乘。
参数:
n (int): 需要计算阶乘的数字。
返回:
int: 数字 n 的阶乘。
"""
if n < 0:
raise ValueError("阶乘只对非负整数定义")
if n == 0:
return 1
return n * factorial_recursive(n - 1)
# 测试代码
try:
number = int(input("请输入一个非负整数:"))
result = factorial_recursive(number)
print(f"{number} 的阶乘是:{result}")
except ValueError as e:
print(e)
方法 2:迭代实现
迭代方法通过循环来计算阶乘,避免了递归调用的开销。代码如下:
def factorial_iterative(n):
"""
使用迭代计算数字 n 的阶乘。
参数:
n (int): 需要计算阶乘的数字。
返回:
int: 数字 n 的阶乘。
"""
if n < 0:
raise ValueError("阶乘只对非负整数定义")
result = 1
for i in range(1, n + 1):
result *= i
return result
# 测试代码
try:
number = int(input("请输入一个非负整数:"))
result = factorial_iterative(number)
print(f"{number} 的阶乘是:{result}")
except ValueError as e:
print(e)
运行示例
假设用户输入如下内容:
请输入一个非负整数:5
运行结果如下:
5 的阶乘是:120
代码解释
递归方法:
-
如果输入的数字
n
小于 0,抛出ValueError
,因为阶乘只对非负整数定义。 -
如果
n
为 0,返回 1(根据阶乘的定义 0!=1)。 -
否则,返回 n \times \text{factorial_recursive}(n - 1)。
迭代方法:
-
如果输入的数字
n
小于 0,抛出ValueError
。 -
初始化结果变量
result
为 1。 -
使用
for
循环从 1 到n
,依次将每个数字乘到result
中。 -
返回最终的
result
。
选择方法
递归方法:
-
代码简洁,易于理解。
-
递归深度有限制,对于较大的
n
可能导致栈溢出。
迭代方法:
-
更高效,避免了递归调用的开销。
-
适用于较大的
n
。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)