Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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:
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(10, 0, 1, str); edit1.text := str; end; |
Moderiert von Tino: Titel überarbeitet.
|
|
LigH
      
Beiträge: 239
Win98SE, Win2000SP4
D7
|
Verfasst: 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 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 12.08.05 16:35
|
|
zemy
      
Beiträge: 207
Win XP Prof.
D7
|
Verfasst: Fr 12.08.05 16:41
Delphi-Quelltext 1:
| procedure foo(bla:string); |
Bla wird als kompletter String übergeben, das bedeutet in einen neuen Speicherbereich geschrieben. Procedure beendet-> String weg
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.
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 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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. 
|
|
BingoBongo
      
Beiträge: 50
Linux Mint
Lazarus, Pascal
|
Verfasst: 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 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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 
|
|
|