Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Probleme mit Rekursiven Fibonacci Algo
F34r0fTh3D4rk - Fr 12.08.05 15:59
Titel: Probleme mit Rekursiven Fibonacci Algo
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 - 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 - 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:
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 - 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
F34r0fTh3D4rk - 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 - 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 - 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 ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!