使用递归对数组取平均值
Take Average of an Array using Recursion
我正在尝试创建一个程序,它将接受用户输入,将该数据输入到动态数组中,然后递归地找到平均值。我的代码的第一部分有效。这允许将新创建的数组传递给方法。
public static void main(String args[])
{
int i = 0;
int sum = 0;
double runningTotal = 0;
int classSize;
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter the class size: ");
classSize = keyboard.nextInt();
int newClassSize[] = new int[classSize];
for (i=0; i < newClassSize.length; i++)
{
System.out.println("Please enter the grade of the user at: " + (i + 1));
newClassSize[i] = keyboard.nextInt();
}
findAverage();
for (i=0; i < newClassSize.length; i++){
sum = sum + newClassSize[i];
}
System.out.println(Arrays.toString(newClassSize));
keyboard.close();
}
}
然而,这是我感到困惑和困惑的地方。我如何将新创建的数组传递给 findAverage() 方法?然后我还需要将其保存到累加器中然后进行分配。有一个更好的方法吗?这是我当前的 findAverage() 方法,但我对自己的实现感到困惑。
public double findAverage(int classAverage, int baseCase, double runningAverage)
{
runningAverage = 0;
int sum = 0;
if (newClassSize.length - 1 > baseCase)
runningAverage = newClassSize.length;
return findAverage();
System.out.println("The class average is " + classAverage);
}
希望我正确理解了你的问题,但下面是如何做到这一点。
基本思想是当索引达到数组中的长度时
递归函数,这是基本情况。所以你所要做的就是在数组中的每个索引点添加总和,并继续将更新的索引和总和传递给递归函数。
class Main {
public static void main(String[] args) {
int newClassSize[] = {1,2,3}; // User Input let say
double average = findAverage(newClassSize);
System.out.println(average);
}
public static double findAverage(int[] arr){
// Avoid division by zero error
if (arr.length==0){
return 0;
}
return findAverageHelper(arr,0,0);
}
public static double findAverageHelper(int[] arr, int index,int sum){
if (index==arr.length){ // Base Case
return (double) sum/arr.length;
}
// Increase index and add current value at index to sum
return findAverageHelper(arr,index+1,sum+=arr[index]);
}
}
我正在尝试创建一个程序,它将接受用户输入,将该数据输入到动态数组中,然后递归地找到平均值。我的代码的第一部分有效。这允许将新创建的数组传递给方法。
public static void main(String args[])
{
int i = 0;
int sum = 0;
double runningTotal = 0;
int classSize;
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter the class size: ");
classSize = keyboard.nextInt();
int newClassSize[] = new int[classSize];
for (i=0; i < newClassSize.length; i++)
{
System.out.println("Please enter the grade of the user at: " + (i + 1));
newClassSize[i] = keyboard.nextInt();
}
findAverage();
for (i=0; i < newClassSize.length; i++){
sum = sum + newClassSize[i];
}
System.out.println(Arrays.toString(newClassSize));
keyboard.close();
}
}
然而,这是我感到困惑和困惑的地方。我如何将新创建的数组传递给 findAverage() 方法?然后我还需要将其保存到累加器中然后进行分配。有一个更好的方法吗?这是我当前的 findAverage() 方法,但我对自己的实现感到困惑。
public double findAverage(int classAverage, int baseCase, double runningAverage)
{
runningAverage = 0;
int sum = 0;
if (newClassSize.length - 1 > baseCase)
runningAverage = newClassSize.length;
return findAverage();
System.out.println("The class average is " + classAverage);
}
希望我正确理解了你的问题,但下面是如何做到这一点。 基本思想是当索引达到数组中的长度时 递归函数,这是基本情况。所以你所要做的就是在数组中的每个索引点添加总和,并继续将更新的索引和总和传递给递归函数。
class Main {
public static void main(String[] args) {
int newClassSize[] = {1,2,3}; // User Input let say
double average = findAverage(newClassSize);
System.out.println(average);
}
public static double findAverage(int[] arr){
// Avoid division by zero error
if (arr.length==0){
return 0;
}
return findAverageHelper(arr,0,0);
}
public static double findAverageHelper(int[] arr, int index,int sum){
if (index==arr.length){ // Base Case
return (double) sum/arr.length;
}
// Increase index and add current value at index to sum
return findAverageHelper(arr,index+1,sum+=arr[index]);
}
}