Autor Beitrag
red-7-seven
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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:
ausblenden Quelltext
1:
Function s(x,y: Cardinal):Cardinal					

Meine Idee war eine Variable bei jedem neuen Aufruf zu incrementieren, um die Abbruchbedingung zu realisieren ->
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: Do 24.10.02 13:08 
ausblenden 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:


Zuletzt bearbeitet von FriFra am Do 24.10.02 13:19, insgesamt 4-mal bearbeitet
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Do 24.10.02 13:11 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: 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!

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 24.10.02 13:15 
Hi
einfach vor dem Aufruf y selbst um eins verringern:
ausblenden 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:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Do 24.10.02 13:18 
@werner: wieso so kompliziert?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 24.10.02 13:20 
Hi

MathiasH hat folgendes geschrieben:
@werner: wieso so kompliziert?

ausblenden 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



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