递归查找数组中只有一个参数数组的平均值
Recursively finding average in array with only one parameter array
我在 Java 中取 class,一个练习要求递归地在一个 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;
}
我想这就是你需要的:
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
。
同样,这在现实世界中完全没有意义,只是作为一个学术挑战。
最后一点,"find" 通常是指在数组中查找元素。在这种情况下,您没有找到任何东西,而是计算平均值,所以函数名称对我来说也不合适。
我在 Java 中取 class,一个练习要求递归地在一个 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;
}
我想这就是你需要的:
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
。
同样,这在现实世界中完全没有意义,只是作为一个学术挑战。
最后一点,"find" 通常是指在数组中查找元素。在这种情况下,您没有找到任何东西,而是计算平均值,所以函数名称对我来说也不合适。