Mittelwert rekursiv

pay

Mitglied
Java:
import java.util.Scanner;

class mittelwertrekursiv {
  
  public static void main(String[] args) {
    
    double mittelwert = mittelwertwert();
    System.out.println(mittelwert);
  }
  public static double mittelwertwert() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Bitte geben Sie eine Zahl ein.");
    double zahl = scanner.nextInt();
    double mittelwert = zahl;
    int n = 0;
    n++;
    System.out.println("Bitte geben Sie eine 1 ein, um weiterzumachen, oder eine 0, um aufzuhören.");
    int i = scanner.nextInt();
    boolean x = i==1;
    if (!x) {
      return mittelwert;
    }
    else {
      mittelwert = (n * mittelwert + mittelwertwert()) / (n+1);
      return mittelwert;
    }
  }
}

Erst seit kurzem beschäftigen wir uns im Unterricht mit Rekursion. Folgende Aufgabe bearbeiten wir aktuell: Es soll rekursiv der Mittelwert einer Menge von Zahlen ausgegeben werden, deren Anzahl vom Benutzer bestimmt wird. Mein Programm funktioniert leider nicht allgemeingültig....nur für wenige Zahlen stimmten die Ergebnisse. Könntet ihr mir einen Anstoß geben bzw. mir sagen, wo sich der Fehler befindet? Danke vielmals...
 

pay

Mitglied
Niemand eine Idee? Wenn ich das richtig sehe, besteht das Problem darin, dass ich zwar die Funktion immer wieder aufrufe (also den rekursiven Ansatz erfülle), der interger Wert n jedoch immer wieder auf 0 gesetzt wird und somit der Mittelwert nicht korrekt berechnet wird. Habe noch kleinere Abwandlungen ausprobiert, doch kein Versuch war bisher von Erfolg gekrönt...Bin absoluter Anfänger und würde mich über Hilfe freuen.
 

pro2

Bekanntes Mitglied
Also nur mal als Tipp: Du rufst immer wieder die Funktion Mittelwert auf und da machst du deine ganze Ein und Ausgabe neu.. macht das Sinn?
Google
 

pay

Mitglied
Das Problem ist, dass ich nicht genau weiß, was der Rekursionsanker sein könnte. Bei Aufgaben, wie das Maximum eines Arrays rekursiv zu bestimmen (Anzahl der Felder wird Schritt für Schritt verringert--> Rekursion), Fakultät rekursiv oder rekursive Addition ist mir der Rekursionsanker klar...bei der vorliegenden Aufgabe aber nicht...was genau ist der Anker?

Edit: Was genau "verringer" ich hier?
 
Zuletzt bearbeitet:

pay

Mitglied
Danke final...habe mal versucht, deinen Ratschlag umzusetzen:

Java:
import java.util.Scanner;

class mittelwertneuneu {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    
    System.out.println("Bitte geben Sie an, wie viele Werte Sie eingeben möchten.");
    int n = scanner.nextInt();
    
    double[] array = new double[n];
    
    for (int x = 0; x < array.length; x++) {
      System.out.println("Bitte belegen Sie die Position " + x + " des Arrays mit einem Wert.");
      array[x] = scanner.nextDouble();
    }
   
    double mittelwert = mittelwertneu(array, array.length) / array.length;
    System.out.println("Der Mittelwert der eingegebenen Zahlen beträgt: " + mittelwert);
    }
  public static double mittelwertneu (double[] array, int n) {
    if (n == 0) {
      return 0;
    }
    else {
      return array[n-1] + mittelwertneu(array,n-1);
    }
    }
  }


Zwei Fragen: Würde diese Lösung (sofern sie denn überhaupt richtig ist) die Bedingung erfüllen, den Mittelwert rekursiv zu bestimmen? Gibt es nicht auch die Möglichkeit, sich nicht die einzelnen eingegeben Werte zu merken, sondern nur den bisherigen Durchschnitt der Werte sowie die Anzahl der Werte? Also entsprechend dieser rekursiven Definition des Mittelwertes:
Kopfrechnen: Durchschnitt rekursiv LoBlog
Wie würde man dies umsetzen, sofern möglich? Danke bis hierhin^^


Edit: Das Problem bei obiger Lösung ist auch, dass der Benutzer bereits zur Eingabezeit wissen muss, wie viele Werte er eingeben muss...ließe sich das auch anders realisieren, sodass der Benutzer vor jeder Eingabe entscheiden kann, ob er einen weiteren Wert eingeben möchte? Dann würde jedoch das Problem auftreten, dass man die Größe eines Arrays nicht zur Verfügung hat...die Größe des Arrays müsste ja dynamisch angepasst werden, was bei Arrays ja nicht möglich ist. Hmmm^^
 
Zuletzt bearbeitet:
G

Gast2

Gast
die Größe des Arrays müsste ja dynamisch angepasst werden, was bei Arrays ja nicht möglich ist.
Richtig, du könntest aber bei jedem Wert nen neues Array erstellen dass um eins größer ist oder alternativ ne Liste verwenden die du dann nach dem Einlesen in nen Array umwandelst.

Java:
mittelwertneu(array, n) / n;
Das könntest du ja auch umschreiben in:
Java:
mittelwertneu(array, array.length) / array.length;
 

pay

Mitglied
Danke erstmal...^^ Mit Liste meinst du eine Kette von Objeken, die ihren Nachfolger referenzieren und eine Information enthalten, oder? Die Definition kenne ich, jedoch haben wir damit noch nicht gearbeitet und dürfen Listen ergo auch noch nicht in Programmen verwenden. Deinen anderen Hinweis mit den unterschiedlichen Listen werde ich mir nochmal durch den Kopf gehen lassen. Das Prinzip verstehe ich, jedoch muss ich bei der Implementierung doch eigentlich auch schon wissen, wie viele arrays ich als Übergabeparameter für die Funktion benötige?
 

Tobse

Top Contributor
Ich verstehe ehrlich nicht so ganz, wozu man da einen Rekursiven ansatz braucht. Sowas ist doch n simpler 3-Zeiler:
Java:
public double avg(int[] ar) {
    long sum=0;
    for (int i=0;i<ar.length;i++) sum+=ar[i];
    return sum/(double) ar.length;
}
 

pay

Mitglied
@ Tobse: Das wäre auch die Lösung, die mir sofort in den Sinn kommen würde bzw. gekommen ist^^ Doch leider beinhaltet die Aufgabe die Forderung, den Mittelwert rekursiv zu berechnen...^^
 
G

Gast2

Gast
Das Prinzip verstehe ich, jedoch muss ich bei der Implementierung doch eigentlich auch schon wissen, wie viele arrays ich als Übergabeparameter für die Funktion benötige?
Was meinst du damit? Du übergibst immer nur ein Array an die Methode, das kann ja ne beliebige Länge haben.

Ich verstehe ehrlich nicht so ganz, wozu man da einen Rekursiven ansatz braucht. Sowas ist doch n simpler 3-Zeiler:
Das soll aber ne Übungsaufgabe zur Rekursion sein.
 

Kiri

Bekanntes Mitglied
Würde vielleicht auch sowas gelten?

Java:
import java.util.ArrayList;
import java.util.Scanner;

public class MittelwertRekursiv {

    double count = 0.0;
    double zahl = 0.0;
    double mw = 0.0;
    double neu = 0.0;
    ArrayList<Double> list = new ArrayList<Double>(); //nur für die Ausgabe
    Scanner scan = new Scanner(System.in);
    
    public static void main(String[] args) {
        MittelwertRekursiv mr = new MittelwertRekursiv();
        System.out.println("Bitte geben Sie ihre Zahlen ein. Zum Beenden bzw. "
                + "zum Starten der Berechnung geben sie 999 ein!");
        mr.berechneMW();
        System.out.println("\nDer Mittelwert der Zahlen: ");
        for(double value : mr.list){
            System.out.println(value);
        }
        System.out.println("lautet: " + mr.mw);
    }
    
    public double berechneMW(){
        zahl = scan.nextDouble();
        while(zahl!=999){
            neu = zahl;
            list.add(neu);//nur für die Ausgabe
            count++;
            if(count <= 1.0){
                mw = neu;
                berechneMW();
                return mw;
            }else{
                mw = (((count-1) * mw ) + neu) / count;
                berechneMW();
                return mw;
            }
        }return mw;
    }
}

Die ArrayList ist nur dafür da, um am Ende die eingegebenen Zahlen nochmal auszugeben. Kann also auch rausgenommen werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
P Mittelwert Arrayelemente berechnen Fehler Java Basics - Anfänger-Themen 5
J Variablen arithmetischen Mittelwert berechnen Java Basics - Anfänger-Themen 5
M Erste Schritte Mittelwert berechnen -> Methode in der Methode? Java Basics - Anfänger-Themen 14
P Erste Schritte Mittelwert zeitlich abhängiger Werte Java Basics - Anfänger-Themen 1
R Werte aus Array addieren und Mittelwert bilden Java Basics - Anfänger-Themen 2
G Array Mittelwert berechnen, wie? Java Basics - Anfänger-Themen 8
M Methoden Mittelwert rationaler Zahlen mittels Methode Java Basics - Anfänger-Themen 4
V Mittelwert berechnen Java Basics - Anfänger-Themen 31
F Gewichteter Mittelwert über eine Zeitperiode Java Basics - Anfänger-Themen 3
N Erste Schritte Mittelwert in Array Java Basics - Anfänger-Themen 4
C Mittelwert berechnen Java Basics - Anfänger-Themen 5
L Brauch Mittelwert jeweils 3 Zahlen die durch 20 Wiederholungen geteilt werden Java Basics - Anfänger-Themen 17
G Mittelwert Java Basics - Anfänger-Themen 31
K Frage wegen Mittelwert Java Basics - Anfänger-Themen 32
M Maximum, Minimum und Mittelwert berechnen Java Basics - Anfänger-Themen 25
B Notenauswertung: Einlesen der Anzahl, Bildung Mittelwert Java Basics - Anfänger-Themen 8
P Mittelwert, Datei einlesen. ich verzweifle Java Basics - Anfänger-Themen 3
N Mittelwert (fast fertig, nur noch 2 fehler ;-) ) Java Basics - Anfänger-Themen 14
M Programm soll n Zahlen von der Tastatur lesen(Mittelwert) Java Basics - Anfänger-Themen 8
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M String rekursiv Spiegeln mit Originalwort davor Java Basics - Anfänger-Themen 3
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
M Zahlenpyramide rekursiv programmieren Java Basics - Anfänger-Themen 7
hello_autumn Potenz selber berechnen, Rekursiv. Java Basics - Anfänger-Themen 6
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D Münzverteilung Möglichkeiten | Rekursiv Java Basics - Anfänger-Themen 3
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
shiroX OOP String rekursiv zurückgeben Java Basics - Anfänger-Themen 6
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
E Erste Schritte Pi, rekursiv Java Basics - Anfänger-Themen 6
A Frage Methode ggt Rekursiv Java Basics - Anfänger-Themen 5
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
E Integral Rekursiv Java Basics - Anfänger-Themen 15
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
D Ziffer in Zahl Rekursiv Java Basics - Anfänger-Themen 4
B Array rekursiv untersuchen Java Basics - Anfänger-Themen 21
I Rekursiv Java Basics - Anfänger-Themen 13
C Rekursiv Zahlenfolgen berechnen mit zwei Variablen Java Basics - Anfänger-Themen 5
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
L File Tree rekursiv Java Basics - Anfänger-Themen 10
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
X Addition rekursiv ohne Schleife Java Basics - Anfänger-Themen 10
M Sudoku Rekursiv lösen Java Basics - Anfänger-Themen 9
E Datentypen ein java problem rekursiv loesen Java Basics - Anfänger-Themen 2
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
D preOrder, inOrder, postOrder rekursiv zusammensetzen aus String Java Basics - Anfänger-Themen 1
K Binomialkoeffizient rekursiv berechnen Java Basics - Anfänger-Themen 8
J eulersche rekursiv berechnen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben