首页 > 解决方案 > 递归地在只有一个参数数组的数组中找到平均值

问题描述

我正在学习 Java 课程,一个练习要求在 int 类型的数组中递归查找平均值(双精度),该方法将单个数组作为参数。我已经在这方面工作了一段时间,还没有得出有人可以引导我走向正确方向的答案吗?

我能够将所有元素加在一起,但是当按数组的长度潜水时,我意识到每次它以较小的值进入方法时都会发生变化。

到目前为止的代码:

public static double findAverage(int[] classRoom) {         
      if(classRoom.length > 0) {
          int grade = classRoom[0];
          int[] newArray = new int[classRoom.length-1]; //create newArray with array length -1
          System.arraycopy(classRoom, 1, newArray, 0, newArray.length); //copy array into array length -1
          return  grade + findAverage(newArray);
      }
      else
         return 0;
}

标签: javaarraysrecursionaverage

解决方案


我认为这是你需要的:

public static double findAverage(int[] classRoom) {
    if (classRoom.length == 0)
        return 0;

    int grade = classRoom[0];

    if (classRoom.length == 1)
        return grade;

    int[] newArray = new int[classRoom.length-1]; //create newArray with array length -1
    System.arraycopy(classRoom, 1, newArray, 0, newArray.length);//copy array into array length -1 
    return  (grade + findAverage(newArray) * newArray.length) / classRoom.length;
}

在最后一行中,您正在average * length获取总和,因此您可以将当前值相加,然后除以总长度(当然是newArray.length + 1.

同样,这在现实世界中根本没有意义,而只是作为一个学术挑战。

最后一点,“查找”通常是指在数组中查找元素。在这种情况下,您没有找到任何东西,而是计算平均值,因此函数名称对我来说似乎也不正确。


推荐阅读