ist break wirklich schlechter programmierstil?
-
Ich denke der Prof hat das break bemängelt weil er eine Rekursion haben wollte.
-
junix schrieb:
Ich denke der Prof hat das break bemängelt weil er eine Rekursion haben wollte.
dann kann ich aber nicht mehr beide teiler in die funktions chicken jedenfalls wuesste ich net wie
-
Hi,
da brauch ich gar nicht lange drübergucken:
b=false; fermat_zerlegung(hilfzahl-root,ende); /*rekursives vorgehen mit den neuen teiler*/ // Ab hier ist Schluss.... fermat_zerlegung(hilfzahl+root,ende); // Das wird niemals aufgerufen...
Allein das sollte dir zu denken geben. Der Code sollte nochmal gründlich überarbeitet werden.
-
CarstenJ schrieb:
Hi,
da brauch ich gar nicht lange drübergucken:
b=false; fermat_zerlegung(hilfzahl-root,ende); /*rekursives vorgehen mit den neuen teiler*/ // Ab hier ist Schluss.... fermat_zerlegung(hilfzahl+root,ende); // Das wird niemals aufgerufen...
Allein das sollte dir zu denken geben. Der Code sollte nochmal gründlich überarbeitet werden.
dann duerfte bei der eingabe von 15 nicht 3 und 5 rauskommen
da der eine aufruf 4+1 und der andre 4-1 bearbeitet
-
@carstenJ: ich ha zwar nicht wirklich viel ahnung aber was du meinst kann nicht stimmen
-
CarstenJ: Woran machst du fest, dass der 2. rekursive Aufruf niemals erfolgen wird?
-
Hallo,
weil die Funktion ja quasi nach dem ersten Aufruf verlassen und dann mit den neuen Werten aufgerufen wird. Also wird doch alles, was nach dem ersten Aufruf der Funktion steht, ignoriert?! Oder hab ich was übersehen?
-
alsoso weit ich das versteh wird die funktion verlassen und nachdem alles ausgefuehrt wurde wird an der stelle weitergemacht
so ist das doch allg bei funktionen
aber meine frage ist ja ob dasd break wirklich schlecht ist da?
ich finde den umweg ueber einen bool nicht wirklich besser
-
CarstenJ schrieb:
weil die Funktion ja quasi nach dem ersten Aufruf verlassen und dann mit den neuen Werten aufgerufen wird. Also wird doch alles, was nach dem ersten Aufruf der Funktion steht, ignoriert?! Oder hab ich was übersehen?
Wenn da jetzt return fermat_zerlegung(... stünde, hättest du recht. Aber so ist das ein normaler Funktionsaufruf, der auch irgendwann mal zurückkommt, falls keine Endlosrekursion vorliegt. Und dann geht es dahinter weiter.
-
CarstenJ schrieb:
Oder hab ich was übersehen?
Also nach deinem Verständnis hast du nichts übersehen, aber du hast das mit den Rekursionen nicht ganz verstanden
. Die Funktion geht nach einem Selbstaufruf selbstverständlich weiter falls der Selbstaufruf irgendwann terminiert (wovon ich ausgehe, denn sonst wäre es sicher ein Programmfehler).
-
ich finde break deswegen auch am sinnvollsten
-
du könntest auch gleich return schreiben, da b ja sowieso auf false gesetzt wird und der if-Teil dann sowieso nicht betreten wird...
-
Walli schrieb:
CarstenJ schrieb:
Oder hab ich was übersehen?
Also nach deinem Verständnis hast du nichts übersehen, aber du hast das mit den Rekursionen nicht ganz verstanden
. Die Funktion geht nach einem Selbstaufruf selbstverständlich weiter falls der Selbstaufruf irgendwann terminiert (wovon ich ausgehe, denn sonst wäre es sicher ein Programmfehler).
Jo, mein Fehler. Sorry.
-
Unser Prof hat damals gesagt das break nich ganz so in Dijkstra (schlagt mich wenn ichs falsch schreib) Schema für strukturierte Programmierung war passt (ich hoffe ihr wisst jetz was ich mein^^).
Wieso es schlechter Stil sein soll weiss ich allerdings auch nicht.. man sieht ja, die schleife wird halt genau _hier_ verlassen, er springt ja nicht irgendwie wild "in der Gegend" herum
ansonsten führen wie immer viele Wege zum Ziel ...
-
Dommel schrieb:
du könntest auch gleich return schreiben, da b ja sowieso auf false gesetzt wird und der if-Teil dann sowieso nicht betreten wird...
ja stimmt schon
aber dann muesste man in return 2 funktionsaufruse uebergeben(was ja nicht geht)
oder die funktion muesste dann 2 werte aufnehemn koennen ,dann kann ich mir rekrusion auch sparen
die fand mein prof allerdings ganz toll auch wenn das vom speicher eher unpraktisch ist
-
lookias schrieb:
aber dann muesste man in return 2 funktionsaufruse uebergeben(was ja nicht geht)
Wieso? Du rufst die Funktionen auf und machst dann erst dein return.
-
oh da hab ich bis jetzt nicht dran gedacht
das waere dann die uebrloesung danke
-
übrings ist sowas
if(b==true)
doppeltgemoppelt. Ein
if(b)
reicht.
-
Ist nicht doppelt gemoppelt, eher Geschmackssache. Ich lasse das "== true" aber auch ganz gerne weg.
-
doch ist doppelgemoppelt.
if((((b==true)==true)==true)==true)
Sowas würde ich z.b. als fünffachgemoppelt bezeichnen und nicht als "geschmackssache"