java - 递归计算数组的标准差

标签 java recursion arraylist standard-deviation

我的作业是使用递归来计算Arraylist的标准差。我了解如何计算标准差,因为我已经在没有递归的情况下完成了它,我只需要帮助实现递归。如果可能的话,我想使用辅助函数。

这是我用来计算平均值的递归方法和辅助方法:

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;
}

这是我需要递归的标准差方法:

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 ));
}

尝试:

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;
}

最佳答案

查看 calcSum 的递归定义,并了解如何使 calcStd 也递归。您需要为此创建另一个“帮助器”方法 - sumSquareDiffs。该方法的签名如下所示:

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

要实现该方法,请查看 calcSum 的作用,并执行相同的操作,只不过您需要添加的是 list.get(i)

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

有了这个方法,您就可以使 calcStd 只依赖于递归方法。

关于java - 递归计算数组的标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022672/

相关文章:

c# - 递归阶乘的速度快得令人怀疑

c++ - 递归搜索 n 叉树中的元素

java - 不确定为什么我在这个循环中遇到 Null 异常

java - 如何在 tomcat 上的 servlet 下发送 XML 文件?

java - 2K 显示器上的 JFileChooser 图标

java - Spring 启动 : use of Maven properties configured in yaml

java - 函数不返回值的递归

java - 2 个哈希表键

java - 10,100,200,300...测试时不工作

java - 使用Gradle导入spring-integration-kafka时出错