## Using Algol 68 to print the Fibonacci series

Three different solutions to the same problem illustrating some of the features of Algol 68.

PROGRAM fibonacci

Prints the first 30 numbers of the fibonacci series.

This  program is free software: you can redistribute it and/or modify  it
under  the  terms of the GNU General Public License as published  by  the
Free  Software  Foundation, either version 3 of the License, or (at  your
option) any later version.

This  program  is  distributed in the hope that it will  be  useful,  but
WITHOUT   ANY   WARRANTY;   without  even   the   implied   warranty   of
MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General

You  should have received a copy of the GNU General Public License  along
with this program.  If not, see <http://www.gnu.org/licenses/>.

29 Mar 20 0.1  001 - Initial version - MEJT

}

BEGIN

INT limit = 30 - 1
INT count := 0;

PROC recursive fibonacci = (INT number) INT{ Finds the nth  Fibonacci number recursivly. }

IF number < 2 THEN
number
ELSE
recursive fibonacci(number - 1) + recursive fibonacci(number - 2)
FI{ recursive fibonacci }

PROC iteritive fibonacci = (INT number) INT{ Finds the nth Fibonacci number iteratively. }

{ Based on : http://www.rosettacode.org/wiki/Fibonacci_sequence#Iterative_3 }

IF number < 2 THEN
number
ELSE
INT even:=0, odd:=1;
FOR count FROM 1 TO number DO
IF ODD count THEN odd ELSE even FI := odd + even { Find the next even or next odd term in the series. }
OD;
IF ODD number THEN odd ELSE even FI
FI{ iteritive fibonacci }

PROC analytic fibonacci = (INT number)INT{ Computes the nth Fibonacci number using Binet's Formula. }

IF number < 2 THEN
number
ELSE
REAL sqrt 5 := sqrt(5);
REAL phi := (1 + sqrt 5) / 2;
REAL _phi := 1/phi;
ROUND((phi**number + _phi**number) / sqrt 5 )
FI{ analytic fibonacci }

FOR count FROM 0 TO limit DO
write (fixed(analytic fibonacci(count), -00));
IF count MOD 8 = 7 OR count = limit THEN write(newlineELSE write(", "FI
OD;

FOR count FROM 0 TO limit DO
write (fixed(iteritive fibonacci(count), -00));
IF count MOD 8 = 7 OR count = limit THEN write(newlineELSE write(", "FI
OD;

FOR count FROM 0 TO limit DO
write (fixed(recursive fibonacci(count), -00));
IF count MOD 8 = 7 OR count = limit THEN write(newlineELSE write(", "FI
OD

END

FINISH.

Compiling, linking and running the program we get…

algol fibonacci
run fibonacci
0, 1, 1, 2, 3, 5, 8, 13
21, 34, 55, 89, 144, 233, 377, 610
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657
46368, 75025, 121393, 196418, 317811, 514229
0, 1, 1, 2, 3, 5, 8, 13
21, 34, 55, 89, 144, 233, 377, 610
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657
46368, 75025, 121393, 196418, 317811, 514229
0, 1, 1, 2, 3, 5, 8, 13
21, 34, 55, 89, 144, 233, 377, 610
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657
46368, 75025, 121393, 196418, 317811, 514229
\$

This entry was posted in Programming and tagged . Bookmark the permalink.

### 1 Response to Using Algol 68 to print the Fibonacci series

1. schillingklaus says:

Is there a free software algol68 compiler for contemporary linux systems, preferrably as a gcc frontend? How about editing support in emacs or vim?

mike632t: No idea about syntax highlighting support in emacs or vim but for a compiler you can try `apt-get install algol68g`

This site uses Akismet to reduce spam. Learn how your comment data is processed.