f:
   proc options(main);
    dcl
        i fixed;
        do i = 0 repeat(i+1);
        put skip list('factorial(',i,')=',fact(i));
        end;
    stop;

    fact:
        procedure(i) returns(float) recursive;
        dcl i fixed;
        if i = 0 then
            return(1);
        return (i * fact(i-1));
        end fact;
    end f;
