MODULE Factorial; IMPORT Out; VAR i: INTEGER; PROCEDURE Iterative(n: LONGINT): LONGINT; VAR i, r: LONGINT; BEGIN ASSERT(n >= 0); r := 1; FOR i := n TO 2 BY -1 DO r := r * i END; RETURN r END Iterative; PROCEDURE Recursive(n: LONGINT): LONGINT; VAR r: LONGINT; BEGIN ASSERT(n >= 0); r := 1; IF n > 1 THEN r := n * Recursive(n - 1) END; RETURN r END Recursive; BEGIN FOR i := 0 TO 9 DO Out.String("Iterative ");Out.Int(i,0);Out.String('! =');Out.Int(Iterative(i),0);Out.Ln; END; Out.Ln; FOR i := 0 TO 9 DO Out.String("Recursive ");Out.Int(i,0);Out.String('! =');Out.Int(Recursive(i),0);Out.Ln; END END Factorial.