gpt4 book ai didi

java - 计算标准差的尾部递归方法

转载 作者:行者123 更新时间:2023-12-02 08:09:58 26 4
gpt4 key购买 nike

public class StampaInversa {

private static class NumberWithCounterAndAverage{
private int number=0;
private int counter=1;
private int average=0;
public int getNumber(){
return number;
}
public int getCounter(){
return counter;
}
public void setNumber(int number){
this.number=number;
}
public void setCounter(int counter){
this.counter+=counter;
}

public int getAverage(){
return avrage;
}
public void setAverage(int average){
this.average=average;
}

public String toString(){
return "Number: "+number+"Counter "+counter+"Average "+average;
}//toString
}//NumeroConContatore

public static void reversePrint(){
Scanner sc= new Scanner(System.in);
System.out.println("Insert number");
int x=sc.nextInt();
if(x==0) return;
reverseprint();
System.out.println(x);
}

public static int sumPrint(){
Scanner sc=new Scanner(System.in);
System.out.println("Insert number");
int x=sc.nextInt();
if(x!=0) x+=sumPrint();
return x;
}

public static NumberWithCounterAndAverage printAverage(){
Scanner sc=new Scanner(System.in);
NumberWithCounterAndAverage ncc= new NumberWithCounterAndAverage();
System.out.println("Insert number");
int x=sc.nextInt();
if(x!=0){
NumberWithCounterAndAverage nccem= printAverage();
ncc.setNumber(x+nccem.getNumber());
ncc.setCounter(+nccem.getCounter());
}
if (x!=0){
ncc.setAverage(ncc.getNumber()/(ncc.getCounter()-1));
}
return ncc;
}

public static void main(String[] args) {
NumberWithCounterAndAverage nccem= printAverage();
System.out.println(nccem.getCounter()+" "+nccem.getNumber()+" average "+nccem.getAverage());
}
}//StampaInversa

我的教授。给了我一个作业:编写尾递归函数来计算:
从输入到插入0为止插入的数字之和;
插入0为止插入的数字的平均值;
插入到0为止插入的数字的标准差;

完成任务的条件是:
不允许任何数据结构(数组、arraryslist、LinkedList...),只允许临时对象(例如我创建的对象:NumberWithCounterAndAverage)
不允许存在实例变量,变量只能由函数拥有。
该函数必须是递归的。

上面代码中的函数工作得很好,但是现在我需要创建一个递归函数来计算具有上述条件的标准差。你有什么线索吗?

如果仍然不清楚该功能应该如何,请告诉我。

最佳答案

我认为你应该追求的想法是有一个函数,它将计算所需的当前计数、总和、平均值等作为参数。这将支持您对无实例变量的要求,与上面的不同。

第一次调用此方法将传递全零。每个后续调用都会读入一个值,如果不是 0,则使用更新后的值调用自身。如果为零,则进行最终计算并输出结果。

答案就在这篇文章中:How to efficiently calculate a running standard deviation?

通过此计算:让该方法采用 sum_x、sum_x2 和计数。 (sum_x是元素之和,sum_x2是平方和)。在收到 0 的迭代中,结果是:

sum = sum_x
average = sum_x / count
stdev = sqrt((sum_x2 / count) - (average * average))

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com