【刷题点滴】求1+2+3+...n
发布人:shili8
发布时间:2024-11-18 11:32
阅读次数:0
**刷题点滴**
**求1+2+3+...n**
在数学中,求1到n的数字之和是一个经典的问题。这个问题可以用多种方法解决,我们将分别介绍几种常见的方法。
###1. 递归法递归法是最简单的一种方法。我们可以定义一个函数,通过递归来计算1到n的数字之和。
def sum_recursion(n): # Base case: 如果 n 是0 或负数,则返回0 if n <=0: return0 # 递归公式:sum_recursion(n) = n + sum_recursion(n-1) else: return n + sum_recursion(n-1) # 测试函数print(sum_recursion(10)) # 输出:55
递归法虽然简单,但它有一个缺点:每次递归都会创建一个新的栈帧,这会导致性能下降。
###2. 动态规划法动态规划法是另一种常见的方法。我们可以先计算1到n-1的数字之和,然后再加上n。
def sum_dp(n): # Base case: 如果 n 是0 或负数,则返回0 if n <=0: return0 # 动态规划公式:sum_dp(n) = n + sum_dp(n-1) else: dp = [0] * (n+1) for i in range(1, n+1): dp[i] = i + dp[i-1] return dp[n] # 测试函数print(sum_dp(10)) # 输出:55
动态规划法比递归法更高效,因为它避免了重复计算。
###3. 公式法公式法是最快的一种方法。我们可以直接使用以下公式:
n(n+1)/2
def sum_formula(n): # Base case: 如果 n 是0 或负数,则返回0 if n <=0: return0 # 公式:sum_formula(n) = n(n+1)/2 else: return n * (n +1) //2# 测试函数print(sum_formula(10)) # 输出:55
公式法是最快的一种方法,因为它不需要任何循环或递归。
### 总结求1到n的数字之和是一个经典的问题。我们可以使用递归法、动态规划法和公式法来解决这个问题。其中,公式法是最快的一种方法。