Hallo!
Ich habe da mal eine kleine Verständnisfrage.
Folgender Java Code verursacht einen Stack Overflow:
---------------------------------->
static int multiply(int a, int b)
{
if((a>0)&&(b>0))
if(a==1)
return b;
else
return multiply(a-1,b)+b;
else
return 0;
}
---------------------------------->
Verstehe aber nicht wieso das so ist, denn diese Funktion kann NIE eine Endlosschleife sein, da ja alle Fälle behandelt werden und in jedem Fall ein return stattfindet, dass die Funktion zum Abbruch bringt. Folgendes könnte ich mir denken: Java ist nicht zufrieden, dass ich den rekursiven Funktionsaufruf in eine "else" Bedingung schreibe, in der im Gegenzug das einzige Element das die Bedingung erfüllen kann auf (a==1) gesetzt ist. Ich denke mal dass der Compiler es deswegen anmeckert, weil er nicht weiss, das ja die zu überprüfende Variable beim rekursiven Aufruf um 1 verringert wird und so denkt, dass sie statisch sei und der Trivialfall niemals eintritt.
Könnte meine Vermutung stimmen? Ansonsten fällt mir leider nichts ein - ist nämlich lästig so ein Stack Overflow Error :)
Danke!
Grüsse,
Daniel
Das ist der ganze Jammer, die Dummen sind immer so sicher und die Gescheiten so voller Zweifel.
[Bertrand Russell]