61 lines
1001 B
Plaintext
61 lines
1001 B
Plaintext
MODULE Fibonacci;
|
|
IMPORT
|
|
Out := NPCT:Console;
|
|
|
|
PROCEDURE Fibs(VAR r: ARRAY OF LONGREAL);
|
|
VAR
|
|
i: LONGINT;
|
|
BEGIN
|
|
r[0] := 1.0; r[1] := 1.0;
|
|
FOR i := 2 TO LEN(r) - 1 DO
|
|
r[i] := r[i - 2] + r[i - 1];
|
|
END
|
|
END Fibs;
|
|
|
|
PROCEDURE FibsR(n: LONGREAL): LONGREAL;
|
|
BEGIN
|
|
IF n < 2. THEN
|
|
RETURN n
|
|
ELSE
|
|
RETURN FibsR(n - 1) + FibsR(n - 2)
|
|
END
|
|
END FibsR;
|
|
|
|
PROCEDURE Show(r: ARRAY OF LONGREAL);
|
|
VAR
|
|
i: LONGINT;
|
|
BEGIN
|
|
Out.String("First ");Out.Int(LEN(r),0);Out.String(" Fibonacci numbers");Out.Ln;
|
|
FOR i := 0 TO LEN(r) - 1 DO
|
|
Out.LongRealFix(r[i],8,0)
|
|
END;
|
|
Out.Ln
|
|
END Show;
|
|
|
|
PROCEDURE Gen(s: LONGINT);
|
|
VAR
|
|
x: POINTER TO ARRAY OF LONGREAL;
|
|
BEGIN
|
|
NEW(x,s);
|
|
Fibs(x^);
|
|
Show(x^)
|
|
END Gen;
|
|
|
|
PROCEDURE GenR(s: LONGINT);
|
|
VAR
|
|
i: LONGINT;
|
|
BEGIN
|
|
Out.String("First ");Out.Int(s,0);Out.String(" Fibonacci numbers (Recursive)");Out.Ln;
|
|
FOR i := 1 TO s DO
|
|
Out.LongRealFix(FibsR(i),8,0)
|
|
END;
|
|
Out.Ln
|
|
END GenR;
|
|
|
|
BEGIN
|
|
Gen(10);
|
|
Gen(20);
|
|
GenR(10);
|
|
GenR(20);
|
|
END Fibonacci.
|