简体   繁体   中英

Calculating Standard Deviation of Array Recursively

My assignment is to use recursion to calculate the standard deviation of an Arraylist. I understand how to calculate standard deviation as I have done it without recursion I just need help implementing recursion. I would like to use a helper function if possible.

This is the recursive method and helper method i use to calculate the average:

public static double calcAvg( ArrayList <Integer> list ) {
    double sum = calcSum(list, 0);
    return sum / list.size();
}

private static int calcSum( ArrayList <Integer> list, int i ) {
    if( i < list.size() ){
        return list.get(i) + calcSum(list, i + 1);
    }
    return 0;
}

This is my Standard Deviation method that needs recursion:

public static double calcStd (ArrayList <Integer> list){
    int sum = 0;
    double average = calcAvg(list);

    for ( int i : list){
        sum += Math.pow((i - average), 2);
    }
    return Math.sqrt( sum / ( list.size() - 1 ));
}

Attempt:

public static double calcStd( ArrayList <Integer> list){
    double avg = calcAvg(list);
    double sum = sumSquareDiffs(list, avg, 0);
    return Math.sqrt( sum / ( list.size() - 1 ));
}
private static double sumSquareDiffs(ArrayList <Integer> list, double avg, int i){
    if (i < list.size()){
        return Math.pow((list.get(i) - avg), 2) + sumSquareDiffs(list, avg, i + 1);
    }
    return 0;
}

Take a look at the recursive definition of calcSum , and see how you can make your calcStd recursive as well. You need to make another "helper" method for this - sumSquareDiffs . The signature of the method would look like this:

double sumSquareDiffs(ArrayList <Integer> list, double avg, int i) {
    ...
}

To implement the method, see what calcSum does, and do the same thing, except instead of adding list.get(i) you need to add

Math.pow((list.get(i) - avg), 2)

With this method in hand, you would be able to make calcStd rely on only recursive methods.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM