Hallo,
Ich muss für die Uni eine Aufgabe machen, in der ich gezwungen bin, durch Rekursion den größten gemeinsamen Teiler zweier Zahlen zu berechnen und zurückzugeben.
Die Funktion sollte eigentlich stimmen. Jedoch werfen manche eingaben einen StackOverflowError zurück. Da ich die Rekursion verwenden muss, wäre es mir also nur möglich, anhand der Größe der eingegebenen Werte vorzeitig eine Fehlermeldung zurückzuwerfen.
Die Frage ist nun aber woher ich weiß, für welche Werte der Stack überläuft.
So ungefär müssten es ja große Werte sein, die einen geringen Abstand zueinander haben. Zum Beispiel bei 100000 und 100001:
100000 100001
100001 100000
1 100000
100000 1
99999 1
99998 1
und so weiter.
Ich hoffe jemand weiß, wie man es berechnen kann, damit ich vorher schon die entsprechenden Werte begrenzen kann.
Ich muss für die Uni eine Aufgabe machen, in der ich gezwungen bin, durch Rekursion den größten gemeinsamen Teiler zweier Zahlen zu berechnen und zurückzugeben.
Die Funktion sollte eigentlich stimmen. Jedoch werfen manche eingaben einen StackOverflowError zurück. Da ich die Rekursion verwenden muss, wäre es mir also nur möglich, anhand der Größe der eingegebenen Werte vorzeitig eine Fehlermeldung zurückzuwerfen.
Java:
private static int gcd(int i, int j) {
if (i < 0) return gcd(-i, j);
if (j < 0) return gcd(i, -j);
if (i == j) return Math.abs(i);
if (i > j) return gcd(i - j, j);
else return gcd(j, i);
}
Die Frage ist nun aber woher ich weiß, für welche Werte der Stack überläuft.
So ungefär müssten es ja große Werte sein, die einen geringen Abstand zueinander haben. Zum Beispiel bei 100000 und 100001:
100000 100001
100001 100000
1 100000
100000 1
99999 1
99998 1
und so weiter.
Ich hoffe jemand weiß, wie man es berechnen kann, damit ich vorher schon die entsprechenden Werte begrenzen kann.