RosettaCodeData/Task/Fibonacci-sequence/Modula-3/fibonacci-sequence-2.mod3

37 lines
504 B
Plaintext

PROCEDURE IterFib(n: INTEGER): INTEGER =
VAR
limit := ABS(n);
prev := 0;
curr, next: INTEGER;
BEGIN
(* trivial case *)
IF n = 0 THEN RETURN 0; END;
IF n > 0 THEN (* positive case *)
curr := 1;
FOR i := 2 TO limit DO
next := prev + curr;
prev := curr;
curr := next;
END;
ELSE (* negative case *)
curr := -1;
FOR i := 2 TO limit DO
next := prev - curr;
prev := curr;
curr := next;
END;
END;
RETURN curr;
END IterFib;