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)