Rekursion in Java-Erklärung anhand eines Beispiels

Hallo zusammen,
ich sitze seit Minuten über 2 Aufgaben, die ich zur Übung lösen soll.
Die Aufgabenstellung lautet: Betrachten Sie das folgende Java-Programm und geben Sie an, was das Programm ausdruckt.

public class Aufgabe1
{
public static void main(String[] args)
{
System.out.println("f = "+f(2345,1234));
}
public static int f(int n, int m)
{
if (n%m == 0) return 0;
return 2*f(n-1, m-1);
}
}

public class Aufgabe2
{
public static int f(int n)
{
if (n

Hallo,

ich hoffe meine Antwort kommt noch rechtzeitig.

Aufgabe 1 ist simpel. Die statische Funktion f liefert bei der Abbruchbedingung den Wert 0. Entweder ist diese Abbruchbedingung gleich beim ersten Aufruf erfüllt, dann ist das Ergebnis 0. Andernfalls wird der erste Rekursionsschritt ausgeführt, eine Multiplikation:
2*f(n-1, m-1)

Für den Fall dass die Abbruchbedingung irgendwann erfüllt ist ergibt dies 0! Grund: irgendwann liefert die Funktion f ja den Wert 0, und 0 mal irgendwas (sprich das Ergbnis der davor ausgeführten Rekursionsschritte) ergibt 0.

Aufgabe 2:
Hier sieht die Aufrufreihenfolge wie folgt aus, wobei r nur die Funktionsaufrufe durchnummeriert:

r | Berechnung

1 | f(1000)
2 | 1 + f(500)
3 | 1 + 1 + f(250)
4 | 2 + 1 + f(125)
5 | 3 + 1 + f(62) [125 /2 = 62.5 ergibt als int 62]
6 | 4 + 1 + f(31)
7 | 5 + 1 + f(15)
8 | 6 + 1 + f(7)
9 | 7 + 1 + f(3)
10 | 8 + 1 + f(1) --> Abbruchbedingung, da 1

Hey Tom,
vielen Dank für deine sehr hilfreiche Erklärung, wenn du mir jetzt noch zeigen könntest, wo ich die Ausgabe (und wie) einfügen muss - wär´s perfekt.

MfG
Dan