有没有人有一个关于如何递归计算谐波平均值和几何平均值的好例子。是否可以使用尾递归函数?
谢谢!
您可以使用“递归”定义:
G(x1,x2,...,xn) = (x1 * G(x2,...,xn)^(n-1))^(1/n)
H(x1,x2,...,xn) = n / ( 1/x1 + (n-1)/H(x2,...,xn) )
这不是计算均值的有效方法,因为取幂/乘法执行 n 次。
使用列表作为输入参数 (N) 的简单 python 实现:
def G(N):
if len(N) == 1: return N[0]
return (N[0] * G(N[1:])**(len(N)-1))**(1/len(N))
def H(N):
if len(N) == 1: return N[0]
return len(N) / ( 1/N[0] + (len(N)-1)/H(N[1:]) )
对于几何平均值,我不能使用@Ante 的方法,因为在我的情况下,1)产品对于浮点数来说太小了,2)我一次都无法阅读完整的系列,但我发现了一个值一。因此,我找不到比使用对数更好的解决方案:
int iCount(0);
float GMeanLog(0);
for (int i=1;i<n;i++)
{
if (iCount > 0)
{
iGMeanLog = GMeanLog+(log(val[i])-GMeanLog)/iCount;
iCount++;
}
else
{
iCount++;
GMeanLog = log(val[i]);
}
}