Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 12.08.05 15:59 
Hallo, ich wollte gerade einen Rekursiven Fibonacci Algo schreiben (aus reiner langeweile), zuerst bekam ich immer nur das erste ergebnis, dann gar nischt mehr, die ausgabe ist ein problem, aber eigentlich müsste das doch so funktionieren, denn ich denke, dass der denkansatz korrekt ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure fibonacci(it, last, curr: integer; str: string);
var
  next: integer;
begin
  if it > 0 then
    begin
      next := last + curr;
      str := str + inttostr(next);
      if it > 1 then
        str := str + ', '
      dec(it);
      fibonacci(it, curr, next, str);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  str: string;
begin
  fibonacci(1001, str);
  edit1.text := str;
end;


Moderiert von user profile iconTino: Titel überarbeitet.
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: Fr 12.08.05 16:17 
Mal so ohne tiefere Prüfung:

Wer einen Parameter (str) nicht als "var" deklariert, der wird ihn nie verändert zurückbekommen (außer es ist schon ein Pointer oder Objekt).
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 12.08.05 16:35 
HÄ ! jetzt geht das, aber warum ging das vorher nicht ?, ich dachte das sind schon variablen ??? so geht's:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure fibonacci(it, last, curr: integer; var str: string);
var
  next: integer;
begin
  if it > 0 then
    begin
      next := last + curr;
      str := str + inttostr(next);
      if it > 1 then
        str := str + ', '
      dec(it);
      fibonacci(it, curr, next, str);
    end;
end;

sind das dann da oben automatisch konstanten oder wie :shock: :? :?:
zemy
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 207

Win XP Prof.
D7
BeitragVerfasst: Fr 12.08.05 16:41 
ausblenden Delphi-Quelltext
1:
procedure foo(bla:string);					

Bla wird als kompletter String übergeben, das bedeutet in einen neuen Speicherbereich geschrieben. Procedure beendet-> String weg

ausblenden Delphi-Quelltext
1:
procedure foo(var bla:string);					

Hier arbeitest du mit dem originalen String, mit dem du die Procedur aufgerufen hast. Änderungen bleiben erhalten.

ausblenden Delphi-Quelltext
1:
procedure foo(const bla:string);					

wie bei var, nur kannst du hier nix verändern. (ReadOnly)

Vieleicht nicht 100%-korrekt beschrieben, hoffe aber das es ungefähr trifft ;)

MfG Zemy

_________________
LifeIsToShortToThinkAboutTheShortness
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 12.08.05 18:10 
mir ist auch gerade in den sinn gekommen, dass es ja keine variablen sind, sondern parameter, die innerhalb der prozedur veränderlich sind, nach außen hin aber konstant, von außen aber wieder variable, deshalb kann man konstanten und variablen übergeben, ansonsten nur eines von beiden. :idea:
BingoBongo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

Linux Mint
Lazarus, Pascal
BeitragVerfasst: Fr 30.09.05 03:15 
wenn der rekursive Algorithmus nicht so einfach klappen will, wie du willst, dann nimm doch einfach den expliziten Algo. Wie der genau lautet findet man bei ner suche in der wikipedia. Ich habe mal mit der entsprechenden Gleichung meine Mathelehrerin sehr überraschen können, als ich die angewandt habe.

Freilich gilt das nur, wenn du nicht unbedingt das ganze rekursiv lösen willst.

Bingo
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 30.09.05 07:04 
es ging mir ja garnet um den fibonacci algo sondern um rekursion.
der code funzt übrigens, war nur ein var zu wenig ;)