Wie, Division und Modulooperator nur mit Addition und Subtraktion in Java?
Die gesamte Aufgabenstellung lautet wie folgt:
Es soll die ganzzahlige Division und der Modulooperator nur mit Hilfe von
Addition und Subtraktion realisiert werden. Schreiben Sie dazu jeweils eine iterative und eine rekursive
Methode (DivIter, DivRek, ModIter und ModRek).
Was ich bis jetzt schon habe sind die Itterativen Lösungen zur Division und Mudolo. Diese sehen bei mir wie folgt aus:
Itterative Division mit + und * ------------------------------
static double DivIter (int x, int y){
int rest = x;
double erg = 0;
int nachkommaerg = 0;
int counter = 0;
while (rest >= y){
rest = rest - y;
erg = erg +1;
}
if (rest != 0){
while ((rest != 0)&(counter <= 15)){
counter++;
rest = rest *10;
while (rest >= y){
rest = rest - y;
nachkommaerg = nachkommaerg + 1;
}
erg = erg + nachkommaerg * Math.pow(10, counter * -1);//Damit werden die Nachkommastellen immer hintendran gehangen, bis Max 15, weil dann double zu Ende ist
nachkommaerg = 0;
}
}
return erg;
}
Itterative Mudolooperation ------------------------------
static int ModIter (int a, int b){
int rest = a;
int erg = 0;
if (a<b){
return a;
}else{
while (rest >= b){
rest = rest - b;
erg = erg +1;
}
return rest;
}
}
Meine Frage ist nun folgende:
Wie sieht die jeweilige rekursive Lösung aus?
Oder könnt ihr mir ein paar Hilfen geben wie man auf die Lösung kommt?
Hierzu noch:
Ich weiß, dass man das Problem auf ein kleineres reduziert und das dann wieder versucht mit der Rekusion zu lösen. z.B. Fibonaccizahl von 5 = Fibonaccizahl von 4 + Fibonaccizahl von 3.
freu mich auf viele gute Antworten
Mfg Shamaz
Es soll die ganzzahlige Division und der Modulooperator nur mit Hilfe von
Addition und Subtraktion realisiert werden. Schreiben Sie dazu jeweils eine iterative und eine rekursive
Methode (DivIter, DivRek, ModIter und ModRek).
Was ich bis jetzt schon habe sind die Itterativen Lösungen zur Division und Mudolo. Diese sehen bei mir wie folgt aus:
Itterative Division mit + und * ------------------------------
static double DivIter (int x, int y){
int rest = x;
double erg = 0;
int nachkommaerg = 0;
int counter = 0;
while (rest >= y){
rest = rest - y;
erg = erg +1;
}
if (rest != 0){
while ((rest != 0)&(counter <= 15)){
counter++;
rest = rest *10;
while (rest >= y){
rest = rest - y;
nachkommaerg = nachkommaerg + 1;
}
erg = erg + nachkommaerg * Math.pow(10, counter * -1);//Damit werden die Nachkommastellen immer hintendran gehangen, bis Max 15, weil dann double zu Ende ist
nachkommaerg = 0;
}
}
return erg;
}
Itterative Mudolooperation ------------------------------
static int ModIter (int a, int b){
int rest = a;
int erg = 0;
if (a<b){
return a;
}else{
while (rest >= b){
rest = rest - b;
erg = erg +1;
}
return rest;
}
}
Meine Frage ist nun folgende:
Wie sieht die jeweilige rekursive Lösung aus?
Oder könnt ihr mir ein paar Hilfen geben wie man auf die Lösung kommt?
Hierzu noch:
Ich weiß, dass man das Problem auf ein kleineres reduziert und das dann wieder versucht mit der Rekusion zu lösen. z.B. Fibonaccizahl von 5 = Fibonaccizahl von 4 + Fibonaccizahl von 3.
freu mich auf viele gute Antworten
Mfg Shamaz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 133973
Url: https://administrator.de/contentid/133973
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
grob:
int div(divid, divis){
if(divid > divis)
return 1 + div(divid - divis, divis)
else
return 0
}
Also: wenn der der Divisor größer als der Divident ist (z.B. 4 : 5), dann 0 zurückgeben (4 ist nicht durch 5 teilbar). Wenn der Divident noch einmal reinpasst (z.B. 9 : 5), dann diese 1 "merken", und den Rest nochmal probieren zu teilen (und das Ergebnis davon zu dieser 1 addieren). Ich denke, daraus solltest du auch den Modulo-Operator herleiten können...
Gruß
Filipp
grob:
int div(divid, divis){
if(divid > divis)
return 1 + div(divid - divis, divis)
else
return 0
}
Also: wenn der der Divisor größer als der Divident ist (z.B. 4 : 5), dann 0 zurückgeben (4 ist nicht durch 5 teilbar). Wenn der Divident noch einmal reinpasst (z.B. 9 : 5), dann diese 1 "merken", und den Rest nochmal probieren zu teilen (und das Ergebnis davon zu dieser 1 addieren). Ich denke, daraus solltest du auch den Modulo-Operator herleiten können...
Gruß
Filipp