Autor |
Beitrag |
red-7-seven
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 24.10.02 12:59
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
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: Do 24.10.02 13:08
Zuletzt bearbeitet von FriFra am Do 24.10.02 13:19, insgesamt 4-mal bearbeitet
|
|
wwerner
      
Beiträge: 185
|
Verfasst: 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; |
_________________ Gruß
Wolfgang
----------
zu hause ist es doch am schönsten
|
|
wwerner
      
Beiträge: 185
|
Verfasst: Do 24.10.02 13:14
FriFra hat folgendes geschrieben: |
Aber wozu soll das gut sein?  |
Das sind Hausaufgaben!
PS.: Deine Funktion ist nicht rekursiv!
_________________ Gruß
Wolfgang
----------
zu hause ist es doch am schönsten
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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 
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
Zuletzt bearbeitet von LCS am Do 24.10.02 13:18, insgesamt 1-mal bearbeitet
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: 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
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
FriFra
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: Do 24.10.02 13:21
wwerner hat folgendes geschrieben: | FriFra hat folgendes geschrieben: |
Aber wozu soll das gut sein?  |
Das sind Hausaufgaben!
PS.: Deine Funktion ist nicht rekursiv! |
Jetzt schon...
|
|
red-7-seven 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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 
|
|
|