Recursion 递归计算调和平均数和几何平均数

Recursion 递归计算调和平均数和几何平均数,recursion,Recursion,有没有人有一个很好的例子来说明如何递归计算调和平均数和几何平均数。是否可以使用尾部递归函数 谢谢 您可以使用“递归”定义: 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次 使用列表作为输入参数的简单python实现(N): 对于几何平均数,我不能使用@Ante的方法,因为在我的例子中,1

有没有人有一个很好的例子来说明如何递归计算调和平均数和几何平均数。是否可以使用尾部递归函数


谢谢

您可以使用“递归”定义:

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次

使用列表作为输入参数的简单python实现(N):


对于几何平均数,我不能使用@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]);
}
}
int-iCount(0);
浮动GMeanLog(0);
对于(int i=1;i 0)
{
iGMeanLog=GMeanLog+(log(val[i])-GMeanLog)/i计数;
iCount++;
}
其他的
{
iCount++;
GMeanLog=log(val[i]);
}
}

我认为也可以计算部分调和平均值。应该有一种方法将结果单独相加,然后在最后进行汇总。除了对数,还有其他方法可以简化除法或乘法吗?
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]);
}
}