Hallo Leute,
Erstmal der Code um den es geht (ist alles ein bisschen unnötig verkompliziert, weil es ne Hausaufgabe ist):
Methode gt bekommt zwei Variablen und soll von beiden die mit größerem Wert herausfinden. (eine größer als Methode).
Methode gcd soll den größten gemeinsamen Teiler errechnen.
Zum Verständnis:
Nat.zero() = 0
Nat.succ(Nat.zero()) = Der Nachfolger von der 0, also die 1
Nat.sub(x,y) = Zieht von Wert x den Wert y ab
Nat.add(x,y) = Addiert zu x den Wert y
Wo liegt jetzt das Problem: In der Methode gcd wird meine if-Bedingung nach dem else (also folgendes: if (gt(x,y) == Nat.succ(Nat.zero())) ) nie erfüllt, obwohl das eigentlich meiner Meinung nicht sein kann. Habe mir alles mal ausgeben lassen und es müsste dort nach gegebenen Rekursionschritten eigentlich die Bedingung erfüllt sein, aber sie wird trotzdem übersprungen.
Hoffe ihr könnt mir weiterhelfen!
Liebe Grüße
Erstmal der Code um den es geht (ist alles ein bisschen unnötig verkompliziert, weil es ne Hausaufgabe ist):
Code:
public static Nat gt(Nat x, Nat y){
Nat z = Nat.succ(Nat.zero());
if ( x == Nat.zero()){
return Nat.zero();
}if (y == Nat.zero()){
return z;
}else{
return gt(Nat.sub(x, z),Nat.sub(y, z));
}
}
public static Nat gcd(Nat x, Nat y){
if (x == y){
return y;
}else{
if (gt(x,y) == Nat.succ(Nat.zero())){
return gcd(Nat.sub(x, y),y);
}else{
return gcd(Nat.sub(y, x),x);
}
}
}
Methode gt bekommt zwei Variablen und soll von beiden die mit größerem Wert herausfinden. (eine größer als Methode).
Methode gcd soll den größten gemeinsamen Teiler errechnen.
Zum Verständnis:
Nat.zero() = 0
Nat.succ(Nat.zero()) = Der Nachfolger von der 0, also die 1
Nat.sub(x,y) = Zieht von Wert x den Wert y ab
Nat.add(x,y) = Addiert zu x den Wert y
Wo liegt jetzt das Problem: In der Methode gcd wird meine if-Bedingung nach dem else (also folgendes: if (gt(x,y) == Nat.succ(Nat.zero())) ) nie erfüllt, obwohl das eigentlich meiner Meinung nicht sein kann. Habe mir alles mal ausgeben lassen und es müsste dort nach gegebenen Rekursionschritten eigentlich die Bedingung erfüllt sein, aber sie wird trotzdem übersprungen.
Hoffe ihr könnt mir weiterhelfen!
Liebe Grüße