Rekursiver Algorithmus

Kann mir bitte jemand sagen, wie man auf diesen rekursiven Algorithmus kommt? Also ist das ein bekannter Algorithmus? Ich habe absolut keine Ahnung, wie man z.B. bei f(3) auf das Ergebnis 6 kommt und wie dieser Algorithmus überhaupt im Allgemeinen funktioniert


Screenshot 2022-09-01 095450.png

Vielen Dank im voraus
 

KonradN

Super-Moderator
Mitarbeiter
Der Algorithmus ist doch gegeben - dann kannst Du den doch durchspielen:

Was passiert bei f(3)?
if (n % 2 == 0) --> 3%2 ist 1 - also else Zweig:
g(n) -> g(3)

Das siehst Du im Baum. f(3) ruft g(3) auf.

Was passiert nun bei g(3)? Kannst Du das weiter durchspielen?
 
Der Algorithmus ist doch gegeben - dann kannst Du den doch durchspielen:

Was passiert bei f(3)?
if (n % 2 == 0) --> 3%2 ist 1 - also else Zweig:
g(n) -> g(3)

Das siehst Du im Baum. f(3) ruft g(3) auf.

Was passiert nun bei g(3)? Kannst Du das weiter durchspielen?

Ich weiß, was der Code bedeutet, aber ich verstehe nicht, warum dann am Ende 6 herauskommt.

3 ist eine ungerade Zahl, und größer als 0, also rechnet man im zweiten Abschnitt f (3 - 1) + f (3 - 2). Warum kommt dann da 6 heraus?
 

KonradN

Super-Moderator
Mitarbeiter
Ich weiß, was der Code bedeutet, aber ich verstehe nicht, warum dann am Ende 6 herauskommt.

3 ist eine ungerade Zahl, und größer als 0, also rechnet man im zweiten Abschnitt f (3 - 1) + f (3 - 2). Warum kommt dann da 6 heraus?
Spiel es weiter durch - wir bauen noch den Aufrufbaum auf - Du hast das f(2) und f(1) erst einmal erfasst ... aber noch hast Du keine Ergebnisse. Die grünen Felder sind also noch leer.

Du musst das alles ganz durchlaufen um zu den Ergebnissen zu kommen.
 

KonradN

Super-Moderator
Mitarbeiter
Ich unterstelle einfach einmal, dass Du den Aufrufbaum selbst erst einmal verstanden hast. Und damit zu den Ergebnissen kommen kannst.

Das ist hier in der Aufgabe extrem heftig, denn es wird eine globale Variable verwendet. Damit wäre bei jedem Aufruf das Ergebnis ein Anderes.

Aber wir gehen vom ersten Lauf aus. Die Variable ist 0.

--> Was passiert bei dem return global++; genau? Das exakte Verständnis ist wichtig.

Der zweite Punkt ist: Wie läuft die Ausführung durch den Baum? Wann wird welcher Knoten wie bearbeitet? Da Du diesen aufgebaut hast, sollte klar sein: die linke Seite kommt erst, dann geht es in den rechten Teilbaum. Damit ist die Reihenfolge der return global++ Aufrufe klar und die entsprechenden Ergebnisse kommen da in den Blättern zustande.

Die Knoten sind dann einfache Berechnungen - Du hast ja klare return Befehle. Damit kannst Du die Werte von den Blättern hoch in den Knoten führen. So kommst Du dann am Ende zu dem Ergebnis.
 
Ich unterstelle einfach einmal, dass Du den Aufrufbaum selbst erst einmal verstanden hast. Und damit zu den Ergebnissen kommen kannst.

Das ist hier in der Aufgabe extrem heftig, denn es wird eine globale Variable verwendet. Damit wäre bei jedem Aufruf das Ergebnis ein Anderes.

Aber wir gehen vom ersten Lauf aus. Die Variable ist 0.

--> Was passiert bei dem return global++; genau? Das exakte Verständnis ist wichtig.

Der zweite Punkt ist: Wie läuft die Ausführung durch den Baum? Wann wird welcher Knoten wie bearbeitet? Da Du diesen aufgebaut hast, sollte klar sein: die linke Seite kommt erst, dann geht es in den rechten Teilbaum. Damit ist die Reihenfolge der return global++ Aufrufe klar und die entsprechenden Ergebnisse kommen da in den Blättern zustande.

Die Knoten sind dann einfache Berechnungen - Du hast ja klare return Befehle. Damit kannst Du die Werte von den Blättern hoch in den Knoten führen. So kommst Du dann am Ende zu dem Ergebnis.

Den Aufbau habe ich nun verstanden. Das global ++ soll bedeuten, dass die global Variable um 1 erhöht wird. Aber ich verstehe irgendwie immer noch nicht, wie man auf die Ergebnisse kommt. Warum f(3) = 6 oder f (2) links = 1 und f(1) rechts = 5. Wie wird das berechnet?
 
Zuletzt bearbeitet:
Ok also die Werte links und rechts werden dann einfach addiert und die global variable bedeutet, dass der Baum endet, wenn diese auf 1 gesetzt wird, verstehe ich das richtig?
 

KonradN

Super-Moderator
Mitarbeiter
Die globale Variable ist einfach nur ein Zähler. Immer, wenn die Methode g in den else Zweig geht, wird der aktuelle Inhalt von global zurück gegeben und danach global um eins erhöht. Du kannst zum Verständnis ja einfachmal folgenden Code betrachten und überlegen, was da ausgegeben wird - und dann das einfach ausprobieren um zu sehen, ob Du es richtig verstanden hast:
Java:
int global = 0;
System.out.println(global++);
System.out.println(global++);
System.out.println(global++);
System.out.println(global++);
System.out.println(global++);

Und dieser else Zweig wird ausgeführt in den Blättern. Und der Baum wird abgearbeitet:
  • erst Teilbäume von links nach rechts
  • dann den Knoten

Damit können wir diese global++ Werte in den Blättern eintragen als Rückgabe: Der erste Knoten hat daher die 0, der nächste die 1, dann die 2, ....

Und nun kannst Du die Knoten selbst behandeln. Bei f Knoten ist dies einfach - da wird ja einfach das Ergebnis vom g Knoten genommen (es findet sich ja ein return g(...); in beiden Teilen der f Methode.

Bei g haben wir im anderen if Zweig die Summe der beiden Aufrufe stehen. Da müssen wir also die Summe bilden.
 
Hm, keine Ahnung irgendwie verstehe ich es immer noch nicht. Die global variable wird doch kaum benutzt, da die Funktion kaum in den else Zweig geht. Sie kommt doch davor immer in return f(n-2) + f(n-1)
 

KonradN

Super-Moderator
Mitarbeiter
Dann schau Dir noch einmal die Baumstruktur an und schau, in welchen Teilen die globale Variable verwendet wird. Das sollte Dir deutlich werden, wenn Du den Baum selbst aufbaust. Du kannst ja den Baum um paar Informationen erweitern:
- Du kannst die Zeile dazu schreiben. Beim Kopf f(3) ist dann ja 3%2 = 1 und dann das g(n) wichtig. So kommt dann ja der Child-Knoten g(3) zu stande. Was passiert da weiter?

Wenn Du einen erweiterten Baum hast, dann erkennst Du evtl. die Aufrufe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
F Rekursiver Algorithmus Java Basics - Anfänger-Themen 5
T Rekursiver Algorithmus: Türme von Hanoi Java Basics - Anfänger-Themen 8
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
K Rekursiver Vergleich von Textmuster und Text Java Basics - Anfänger-Themen 2
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
S Rekursiver InsertionSort ohne Schleife Java Basics - Anfänger-Themen 7
K Methoden Fibonacci in Array mit rekursiver Methoden Java Basics - Anfänger-Themen 19
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
T Rekursiver Methodenaufruf funktioniert nicht Java Basics - Anfänger-Themen 7
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
B Quadratwurzel nach Heron in rekursiver Darstellung Java Basics - Anfänger-Themen 1
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
W sysout in rekursiver methode Java Basics - Anfänger-Themen 4
A Rekursiver Pseudocode Java Basics - Anfänger-Themen 4
E Problem bei rekursiver Berechnung des Binomialkoeffizienten Java Basics - Anfänger-Themen 5
S Probleme bei Ausgabe von rekursiver Methode (List) Java Basics - Anfänger-Themen 16
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
O Faktorielle mit rekursiver Methode berechnen Java Basics - Anfänger-Themen 6
S Laufzeit bei rekursiver Methode messen Java Basics - Anfänger-Themen 6
J rekursiver Methodenaufruf Java Basics - Anfänger-Themen 12
D Datentypen Rekursiver Datentyp Java Basics - Anfänger-Themen 8
S Werte von rekursiver Methode Java Basics - Anfänger-Themen 5
Q rekursiver algo. Java Basics - Anfänger-Themen 16
M Potenz mithilfe rekursiver Funktion Java Basics - Anfänger-Themen 13
C Frage zu negativen und positiven Exponenten in rekursiver Methode Java Basics - Anfänger-Themen 11
G Rekursiver Aufruf einer JSP über eine JavaScript-Funktion Java Basics - Anfänger-Themen 5
G PRoblem mit rekursiver float additions methode Java Basics - Anfänger-Themen 9
B rekursiver Funktionsaufruf Java Basics - Anfänger-Themen 2
E fehlermeldung bei rekursiver grafik Java Basics - Anfänger-Themen 11
F Problem bei rekursiver Binärsuche Java Basics - Anfänger-Themen 2
K Algorithmus entwickeln Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben