Python递归实现加权平均值的代码正确性验证咨询
加权平均递归实现核验
现有代码逻辑验证
你编写的递归函数实际计算的数学表达式可以通过展开递归逻辑得到:
对于长度为n的输入列表[a₁, a₂, a₃, ..., aₙ],函数返回值的展开式为:
w = a₁/1 + a₂/2 + a₃/3 + ... + aₙ/n
你可以把这个结果和你需要实现的加权平均公式做对比:
- 如果公式定义的就是「第i个元素除以i后求和」,那你的实现是正确的
- 如果公式是常见的位置加权平均(第i个元素权重为i,分子为各元素乘权重之和,分母为权重之和),对应表达式为
w = (1*a₁ + 2*a₂ + 3*a₃ + ... +n*aₙ) / (n*(n+1)/2),那么你的现有实现不符合要求。
符合位置加权平均要求的递归实现
如果需要实现上述常见位置加权平均,可以参考以下写法,其中分子求和用了递归实现,满足自定义递归函数的要求:
def recursive_weighted_sum(l, n): # 递归计算分子:1*a1 + 2*a2 + ... +n*an if n == 1: return l[0] * 1 return l[n-1] * n + recursive_weighted_sum(l, n-1) def wavg(l): n = len(l) if n == 0: return 0 # 空列表边界处理 sum_weighted = recursive_weighted_sum(l, n) sum_weights = n * (n+1) / 2 return sum_weighted / sum_weights
测试示例
拿列表[1,2,3]测试:
- 你的现有代码返回结果:
3/3 + 2/2 +1/1 = 1+1+1=3 - 位置加权平均结果:
(1*1 + 2*2 +3*3)/(3*4/2) = (1+4+9)/6 = 14/6 ≈2.333
内容的提问来源于stack exchange,提问作者PwNzDust
相关产品推荐
相关产品推荐

