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 :)