【问题标题】:Finding Average of Array of integers using recursion使用递归查找整数数组的平均值
【发布时间】:2015-01-15 10:08:39
【问题描述】:

我正在尝试使用 recursion 查找数组中整数元素的平均值。我知道如何使用循环来做到这一点,但我必须通过递归来完成我的赋值,所以我试图做的是使用递归找到元素的总和,然后将总和除以数组的长度。我写了这段代码,但它给了我一个错误的结果:

public int findAvg(int a[], int n)
{
int sum,avg;
if(n==1)
 {

sum=a[0];
return sum;
}
else 
{
sum=a[n-1]+findAvg(a,n-1);
}

avg = sum/n;
return avg;}

主类findAvg方法的调用:

public class main {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Recursive r = new Recursive ();
    int integersArr [] = {1,2,3,4,5};

    int max = r.findMax(integersArr,integersArr.length );
    int avg = r.findAvg(integersArr, integersArr.length);
    System.out.println("Maximum element = "+ max);
    System.out.println("Average value of elements = "+ avg);


 }

}

控制台输出:

元素的平均值 = 1

【问题讨论】:

    标签: java arrays recursion


    【解决方案1】:
    public class main {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        Recursive r = new Recursive ();
        int integersArr [] = {1,2,3,4,5};
    
        int max = r.findMax(integersArr,integersArr.length );
        int avg = r.findAvg(integersArr, integersArr.length);
        System.out.println("Maximum element = "+ max);
        System.out.println("Average value of elements = "+ avg);
    
    
     }
    
    }
    

    【讨论】:

      【解决方案2】:
      public double average(int y[], int i) {
          double result;
          result = (double)y[i] / (double)y.length;
          if (i == 0)
              return result;
          else
              return result + average(y, i-1);
      }
      

      【讨论】:

        【解决方案3】:

        首先整数的平均值可以是浮点数。因此,将函数的返回类型设置为浮动或双精度。 现在,
        如果您有一组 n 平均为 x 的数字,并且您想在该集合中再添加一个数字(例如 b)。新平均值将为 ((n * x) + b) / (n + 1)。在您的代码中使用相同的技巧。

        public float findAvg(int a[], int n)
        {
            float sum,avg;
            if(n==1)
            {
                sum=a[0];
            }
            else 
            {
                // Calculate sum of n-1 numbers = (n-1) * (avg of n-1 numbers)
                // and add nth number to it ( i.e. a[n-1])
                sum= a[n-1]+ (n-1) * findAvg(a,n-1);
            }
            avg = sum/n;
            return avg;
        }
        

        【讨论】:

        • 谢谢我编辑了总和,以便递归调用每次返回的平均值是正确的。
        【解决方案4】:

        首先sum=a[n-1]+findAvg(a,n-1); 是错误的,因为如果findAvg(a,n-1) 返回前(n-1) 个元素的正确平均值,则总和应该是a[n-1] + (n-1) * findAvg(a,n-1)

        其次,在avg = sum/n; 中除整数时会丢失精度,请考虑使用双精度数。

        【讨论】:

          猜你喜欢
          • 2020-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多