Entwickler-Ecke
Sonstiges (Delphi) - Multiplikation durch Addition (rekursiv)
red-7-seven - Do 24.10.02 12:59
Titel: Multiplikation durch Addition (rekursiv)
Hi!
Habe folgendes Problem: suche einen rekursiven Algorithmus zur Multikplikation zweier Zahlen durch eine Addition. Die Funktion soll folgende Form haben:
Quelltext
1:
| Function s(x,y: Cardinal):Cardinal |
Meine Idee war eine Variable bei jedem neuen Aufruf zu incrementieren, um die Abbruchbedingung zu realisieren ->
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| s(x,y: Cardinal): Cardinal; begin if i=x then s:=0 else i:=i+1; s:=y+ s(x,y); end; |
allerdings müsste ich dabei ja die Zählvariable i in die Parameterliste schreiben; bzw. müsste ich sie ja irgendwo initialisieren... ABER wenn ich diese mit in die Parameterliste schreiben, dann hat die Funktion nicht mehr die verlangte Form:
Quelltext
1:
| s(x,y:Cardinal): Cardinal... |
Kann mir jemand nen Tip geben?
Danke im Voraus!
MfG
red-7-seven
(24.10.02 17:16 Tino) Code-Tags hinzugefügt.
FriFra - Do 24.10.02 13:08
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function s(x,y: integer):integer var n: integer; begin if y = 0 then Result := 0 else if y < 0 then begin Result := Result - x; if y < -1 then Result := s(Result, y + 1); end else begin Result := Result + x; if y > 1 then Result := s(Result, y - 1); end; end; |
Aber wozu soll das gut sein? :roll:
wwerner - Do 24.10.02 13:11
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| s(x,y: Cardinal): Cardinal; begin if x=0 then s:=y else begin dec(x); s := y+ s(x,y); end; end; |
wwerner - Do 24.10.02 13:14
FriFra hat folgendes geschrieben: |
Aber wozu soll das gut sein? :roll: |
Das sind Hausaufgaben!
PS.: Deine Funktion ist nicht rekursiv!
LCS - Do 24.10.02 13:15
Hi
einfach vor dem Aufruf y selbst um eins verringern:
Quelltext
1: 2: 3: 4: 5: 6:
| function s(x, y: Cardinal): Cardinal; begin Result := x; if y > 1 then Result := Result + s(x, y - 1); end; |
Gruss Lothar
----
Hier haben wieder mal 3 Leute gleichzeitig reagiert :mrgreen:
MathiasH - Do 24.10.02 13:18
@werner: wieso so kompliziert?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function multi(x, y: integer): integer; var i: integer; begin Result := x; for i := 1 to y do Inc(Result, x); end; |
kann sein, dass es jetzt einmal zu viel rauskommt, hab grad kein Delphi da zu testen...
MathiasH
LCS - Do 24.10.02 13:20
Hi
MathiasH hat folgendes geschrieben: |
@werner: wieso so kompliziert?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function multi(x, y: integer): integer; var i: integer; begin Result := x; for i := 1 to y do Inc(Result, x); end; |
kann sein, dass es jetzt einmal zu viel rauskommt, hab grad kein Delphi da zu testen...
MathiasH |
Und wo ist hier die Rekursion :roll: :mrgreen:
Gruss Lothar
FriFra - Do 24.10.02 13:21
wwerner hat folgendes geschrieben: |
FriFra hat folgendes geschrieben: |
Aber wozu soll das gut sein? :roll: |
Das sind Hausaufgaben!
PS.: Deine Funktion ist nicht rekursiv! |
Jetzt schon...
red-7-seven - Do 24.10.02 13:32
Titel: danke!!!
Bin gerade auch selbst draufgekommen -
aber trotzdem DANKE für alle Antworten !
is gut - wenn man nochmal ne Rückversicherung hat!
MfG
red-7-seven :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!