Einzelnen Beitrag anzeigen

Benutzerbild von Freekill
Freekill

Registriert seit: 18. Sep 2007
1 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Fibonacci-Zahlen (iterativ)

  Alt 18. Sep 2007, 17:12
Zitat von Piwi:
Hallo Delphi-Gemeinde,

ich habe in diesem Programmtext irgend einen Denkfehler drin, der mir nicht auffallen will. Es geht darum, die Fibonacci-Zahl an der Stelle n in der Fibonacci-Reihe darzustellen.

Fibonacci-Zahlen

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Die nächste Zahl in der Reihe ergibt sich also immer aus der Summe seiner beiden Vorgänger. Rekursiv ist das ganze relativ einfach darzustellen, iterativ wohl auch, aber dort ist ein Denkfehler in meinem Programmtext:

Delphi-Quellcode:
function TForm1.fibonit(n:integer):integer;
var x,y,z,i:integer;
begin
 x:=1;
 y:=1;
 i:=0;
 repeat
 i:=i+1;
 z:=x+y;
 y:=x;
 x:=z;
 until i=(n-1);
end;


procedure TForm1.iterativbuttonClick(Sender: TObject);
var n:integer;
begin
n:=strtoint(edit1.text);
listbox1.items.add(inttostr(fibonit(n)));
end;
Er trägt in die Listbox nach ca. zehnsekündiger Berechnungsphase (!!) eine relativ hohe Zahl ein, selbst wenn ich n=1 wähle. Wo ist der Fehlerteufel?

DANKE IM VORAUS!
Auch wenn der letzte Beitrag hier schon eine ganze Weile her ist, wage ich es den Quelltext für zukünftige Besucher zu korrigieren. Die Abbruchbedingung für die Repeat-Schleife stimmt nicht ganz. Ich musste im Rahmen des Informatiksunterricht selbst die Fibonaccizahlen Iterativ programmieren. Dabei ist mir bei dieser Variante aufgefallen, dass die Abbruchbedingung nicht "until i=(n-1)" sondern "until i=(n-2)" heißen muss. Ansonsten verschieben sich die Zahlen um eine Stelle nach vorn und die Reihe stimmt nicht mehr.
  Mit Zitat antworten Zitat