Hi!
public void ZeichnePythagorasbaum(Punkt1, Punkt2, Tiefe) {
if (Tiefe >= 0) {
Tiefe--;
[...]
ZeichnePythagorasbaum(PunktNeu, Punkt2, stufe);
ZeichnePythagorasbaum(Punkt4, PunktNeu, stufe);
}
}
ZeichnePythagorasbaum((200, 340), (270, 340),15);
Was ich nicht verstehe: der zweite nun folgende Funktionsaufruf dürft doch nie stattfinden...? Oder gibt die Funktion ZeichnePythorasbaum() implizit etwas zurück, bevor sie sich selbst zum zweiten Mal aufruft....?
Sie gibt eben nichts zurück. Tiefe bleibt nach dem Dekrementieren unverändert für den Rest dieser Funktionsinkarnation. Wenn du mit 15 startest rufst du startest du beide Funktionsaufrufe mit jeweils 14.
Wenn ich diese Funktion wie oben konstruiert aufrufe ([...] friert bei einer Tiefe von über 16 meine Entwicklungsumgebung ein [...]. Scheinbar ist der RAM voll. Nun kenne ich mich in Threadprogrammierung bzw. Java nicht gut aus. Gibt es grundsätzlich irgendwelche Möglichkeiten, um höhere Tiefen zu erreichen? RAM leeren nach jedem Funktionsaufruf oder ähnliches?
Ein Funktionsaufruf ergibt zwei weitere Funktionsaufrufe, insgesamt 3. Je nach Tiefe geht das in Zweierpotenzen weiter: 1 => 2 => 4 => 8 => 16 => 32 => 64 => 128 => 256 ... Es fängt klein an, aber es steigert sich dann stark. Im RAM ist sicher noch genügend Platz aber entweder läuft dir der Stack über, oder die Berechnungen dauern einfach zu lange.
Lo!