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?
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.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?
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.
int global = 0;
System.out.println(global++);
System.out.println(global++);
System.out.println(global++);
System.out.println(global++);
System.out.println(global++);