Harmonische Reihe rekursiv berechnen?

Status
Nicht offen für weitere Antworten.

0001001

Bekanntes Mitglied
Meine Versuche die folgende harmonische Reihe rekursiv zu berechnen scheitern an meinem Algorithmus:
Harmonische Reihe: Summe von i bis n über alle (1/i)
also z.b. für n 4: (1/1)+(1/2)+(1/3)+(1/4)

Jedoch bringe ich es nicht hin dass dieser Wert rekursiv berechnet wird.
Code:
public class Harmonie {
	public static void main(String[] argv){
		System.out.println(berechnen(0,4,0));		
	}
	public static float berechnen(float i,float n,float sum){
		i++;
		if(n>i){
			sum = (1/i) + berechnen(i,n,sum);
		}
		return sum;		
	}
}

Beim Start wird für n ein wert von 4 übergeben. Ergebnis hier: 1,8333. Das wäre jedoch das richtige Ergebnis für n=3.
Wo liegt da mein Fehler?
 

Leroy42

Top Contributor
Du brichst die Rekursion einfach zu früh ab.

Eine andere Frage. Wieso schleppst du deine Zwischensumme und den Index mit dir herum?

Code:
double harmonisch(int n) {
    return n<1 ? 1 : 1.0 / n + harmonisch(n-1);
}

Oder muß die Berechnung unbedingt vorwärts erfolgen?
 

0001001

Bekanntes Mitglied
Ach habs gelöst: war das if(n>=i). aus dem > muss ein >= werden:
Code:
public class Harmonie {
	public static void main(String[] argv){
		System.out.println(berechnen(0,3,0));		
	}
	public static float berechnen(float i,float n,float sum){
		i++;
		if(n>=i){
			sum = (1/i) + berechnen(i,n,sum);
		}
		return sum;		
	}
}
 

0001001

Bekanntes Mitglied
Leroy42 hat gesagt.:
Du brichst die Rekursion einfach zu früh ab.

Eine andere Frage. Wieso schleppst du deine Zwischensumme und den Index mit dir herum?

Code:
double harmonisch(int n) {
    return n<1 ? 1 : 1.0 / n + harmonisch(n-1);
}

Oder muß die Berechnung unbedingt vorwärts erfolgen?

Gute Frage! Ich seh schon du hast es ziemlich drauf. Leider kommt man als Anfänger nicht immer zur elegantesten Lösung sondern ist froh wenn man das Problem überhaupt rekursiv lösen kann. :oops:
 

Leroy42

Top Contributor
P.S.: Und ich sag' dir lieber nicht, wieviele Monate ich damals mit
C++ herumgekrebst habe, bis ich einigermaßen lauffähige Programme
zusammenfrickeln konnte :oops:
 

Bert Brenner

Bekanntes Mitglied
Vielleicht hilft dir dies um Leeroys Lösung besser zu verstehen:
Code:
double harmonisch(int n) {
  if (n>1)
    return 1d/n + harmonisch(n-1);
  else
    return 1;
}
 

0001001

Bekanntes Mitglied
@Leroy42 war auch nicht böse gemeint. Sorry wenns so rübergekommen ist, hab mich eigentlich sehr gefreut dass du mir geantwortet hast.

@Bert Brenner: Danke danach wollte ich eben fragen =)
 

Leroy42

Top Contributor
Noch ein Hinweis. Als Minimalist hat mich früher immer gekribbelt double Werte
zu benutzen wenn für meine Zwecke float vollkommen ausreichend war.

Mittlerweile weiß ich allerdings, daß Java intern sowieso immer mit
double-Genauigkeit rechnet und bei Benutzung von float-Werten diese
jedesmal in double umrechnen muß und umgekehrt.

Darum habe ich in der Beispiel-Methode statt float gleich double benutzt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Rekursives Programmieren --> harmonische Reihe Java Basics - Anfänger-Themen 3
G harmonische Reihe Java Basics - Anfänger-Themen 2
T Harmonische Reihe Java Basics - Anfänger-Themen 5
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
rosima26 Taylor-Reihe in Java Java Basics - Anfänger-Themen 20
J Fibonacci-Reihe Java Basics - Anfänger-Themen 12
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
K Apache POI Excel Letzte Reihe einer bestimmten Spalte Java Basics - Anfänger-Themen 1
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
M Java Anfänger - Video Tutorial Reihe (DEUTSCH) Java Basics - Anfänger-Themen 11
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
A Taylor Reihe für Sinus Java Basics - Anfänger-Themen 3
w0ddes Reihe deselektieren in einer JTable Java Basics - Anfänger-Themen 2
B vorletzten Wert aus einer Reihe bekommen Java Basics - Anfänger-Themen 6
Shalimar Längste Reihe anzeigen lassen Java Basics - Anfänger-Themen 11
A Eine Javaaufgabe die ich nicht auf die Reihe bekomme. Java Basics - Anfänger-Themen 7
W Innerhalb TableModel auf aktivierte Reihe reagieren Java Basics - Anfänger-Themen 3
Dilandau erweiterbare reihe aus elementen machen? Java Basics - Anfänger-Themen 10
S Zahlen reihe Programmieren Java Basics - Anfänger-Themen 12
G JTable Reihe und Spalte Java Basics - Anfänger-Themen 7
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
P Mittelwert rekursiv Java Basics - Anfänger-Themen 13
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

Ähnliche Java Themen

Neue Themen


Oben