Example 16. Using Recursive Macros
             .fcnolist
fact1  .macro n
       .if n == 1
          MVK globcnt, A1               ; Leave the answer in the A1 register.
       .else
          .eval 1, temp               ; Compute the decrement of symbol n.
          .eval globcnt*temp, globcnt   ; Multiply to get a new result.
          fact1 temp                    ; Recursive call.
       .endif
       .endm
fact   .macro n
       .if ! $iscons(n)                 ; Test that input is a constant.
           .emsg "Parm not a constant"
       .elseif n < 1                    ; Type check input.
           MVK 0, A1
       .else
           .var temp
           .asg n, globcnt
           fact1 n                      ; Perform recursive procedure
       .endif
       .endm