无法实现数组均值的递归方法

时间:2014-06-07 03:24:55

标签: c# arrays algorithm recursion

我有一个数组(double),我想在C#中实现一个递归方法,使用以下算法计算数组中给定位置的运行平均值:

μ n + 1 =(n *μ n )/(n + 1)+ X n + 1 / n

其中μ n + 1 是我感兴趣的位置的平均值, μ n 是先前迭代的平均值,X n + 1 是数组的第n个元素。

我已经能够使用平均函数和迭代函数但不能递归:

    static double Flow(double[] A, int n)
    {
        double U = (A[0] + A[1]) / 2.0;
        if (n == 2) { return U; }
        else if (n == 1) { return A[0]; }
        else
        {
            for (int i = 3; i <= n; i++)
            {
                U = Avg(A, U, i);
            }
        }
        return U;
    }

    static double Avg(double[] A, double M, int n)
    {
        double a =(n - 1) * M / (n);
        double b = A[n - 1] / (n);
        return a + b;
    }

1 个答案:

答案 0 :(得分:0)

您需要定义μ1,无论您的第一个平均值的初始值是什么,您的算法都可以工作。另外,变量i不参与你的表达,那是什么呢?由于Xn + 1除以n,我认为它不能为零。然后该函数应如下所示:

double Avg(double[] array, int n)  
{    
    if (n = 2) 
    {
    return u1/2+array[2]; //u1 is a set value.
    }  

    return (n-1)*Avg(array, n-1)/n+array[n]/(n-1);
}

最后但并非最不重要的是,在μn= ...μ(n-1)而不是μ(n + 1)= ...μn中表达递归算法更方便。