编程问题解析:问题描述: 编写一个函数,输入一个整数n,输出n的阶乘。如果n小于等于1,返回0,否则返回阶乘结…


编程问题解析:如何计算n的阶乘?

背景介绍

阶乘(factorial)是一个数学概念,定义为n的乘积,若n≤1,返回0;否则返回n的乘积。例如:
factorial(10) = 10 × 9 × … × 1 = 3628800
factorial(5) = 120

思路分析

1. 问题边界条件

若输入n ≤1,直接返回0。这限制了计算范围,避免了无限递归或计算过大整数问题。

2. 优化方法

  • 递归优化:通过递归调用,每次计算当前n的阶乘,但需注意递归深度限制(例如n=20时,递归深度可能超过限制);
  • 迭代优化:通过循环从n到2,逐步计算当前阶乘的值,避免递归的潜在问题。

代码实现

1. 递归实现

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

2. 迭代实现

def factorial(n: int) -> int:
    if n <= 1:
        return 0
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result

3. 可运行测试

print(factorial(5))  # 输出 120  
print(factorial(10))  # 输出 3628800

总结

通过递归与迭代的方法,我们实现了n的阶乘计算。递归方法虽然直观,但需注意递归深度;迭代方法则更加高效,适用于大数值范围。该函数在编程问题中常被使用,体现了数学原理与算法优化的核心思想。