/******************************************************/
/* This program evaluates the Factorial function (n!) */
/* using recursion and FIXED DECIMAL data.            */
/******************************************************/
dfact:
     procedure options(main);
     declare 
        i fixed;
     do i = 0 repeat(i+1);
        put skip list('Factorial(',i,')=',factorial(i));
     end;
     stop;

     factorial:
          procedure(i) returns(fixed decimal(15,0)) 
                       recursive;
          declare 
             i fixed;

          if i = 0 then return (1);
          return (decimal(i,15) * factorial(i-1));
     end factorial;

end dfact;

