;23-Jun-1999                                                    Alain Brobecker
;Test the arithmetic functions +,- and * of SockZ

  "(24!-18!)*21! = " CR
  31699293086379178517941531181139886080000000
  COPY
  COPY HPRINT " (given by TI89)" CR

  24 !r 18 !r - 21 !r *
  COPY HPRINT " (recursive)" CR
  - SKIP=0 Error

  24 !i 18 !i - 21 !i *
  COPY HPRINT " (iterative)" CR
  - SKIP=0 Error

  TIME 4096 !r TIME
  SWAP2 3 SWAP -
  CR "4096! computed in " HPRINT " cs (recursive) and in "

  TIME 4096 !i TIME
  SWAP2 3 SWAP -
  HPRINT " cs (iterative)" CR
  - SKIP=0 Error
END

.Error "An error occured" END

;Recursive version
;IN         n
;OUT        n!
#!r
  COPY                  ;n n
  1 -                   ;n n-1
  COPY SKIP<>0 !rEnd    ;If n=1 the go to !rEnd
  !r                    ;n (n-1)!
  *                     ;n!
END

.!rEnd DROP END

;Iterative version
;IN         n
;OUT        n!
#!i
  COPY                  ;n n
.!l
  1 -                   ;n*...*k k-1
  COPY SKIP<>0 !iEnd    ;Finished?
  COPY                  ;n*...*k k-1 k-1
  3 SWAP                ;k-1 n*...*k k-1
  *                     ;k-1 n*...*k*(k-1)
  SWAP2
  !l

.!iEnd DROP END
