{
  Fibonacci-Zahlen
  Turbo Pascal
  Wolfgang.Urban@schule.at
}

PROGRAM Fibonacci;
USES Crt; { 'KeyPressed' einbinden }

{ Algorithmus 1 }

FUNCTION Fibo1(n: INTEGER): LONGINT;
BEGIN
  IF n<=2 THEN Fibo1 := 1
          ELSE Fibo1 := Fibo1(n-1)+Fibo1(n-2);
END;


{ Algorithmus 1a }
{ In Original-Pascal nicht moeglich, da kein 'Exit' }

FUNCTION Fibo1a(n: INTEGER): LONGINT;
BEGIN
  IF n<=2 THEN BEGIN
    Fibo1a := 1;
    Exit
  END;
  Fibo1a := Fibo1a(n-1)+Fibo1a(n-2);
END;

{ Algorithmus 3 }
{ else verwendet, um Exit zu vermeiden }

FUNCTION Fibo3(n: INTEGER): LONGINT;
VAR a,b,neu: LONGINT;
    zaehler: INTEGER;
BEGIN
  IF n<=2
    THEN Fibo3 := 1
    ELSE BEGIN
      a := 1;
      b := 1;
      FOR zaehler := 3 TO n DO BEGIN
        neu := a+b;
        a := b;
        b := neu
      END
    END;
  Fibo3 := neu;
END;

{ Algorithmus 4 }

FUNCTION Fibo4(n: INTEGER; a,b: LONGINT): LONGINT;
BEGIN
  IF n=1 THEN BEGIN
    Fibo4 := a;
    Exit
  END;
  IF n=2 THEN BEGIN
    Fibo4 := b;
    Exit
  END;

  Fibo4 := Fibo4(n-1,b,a+b);
END;


{ Hauptprogramm }

BEGIN
  Writeln('Alg. 1 : ',Fibo1(10));
  Writeln('Alg. 4 : ',Fibo4(10,1,1));
  REPEAT UNTIL KeyPressed;
END.