// ---------------- // recursive method (requires INTV_T input parm) // ---------------- fact_r @FN [n] { @CASE when:(n < 0iv) {-1iv } when:(n == 0iv) { 1iv } else: { n * (@fact_r n-1iv) } }; // ---------------- // iterative method (requires INTV_T input parm) // ---------------- fact_i @FN [n] { @CASE when:(n < 0iv) {-1iv } when:(n == 0iv) { 1iv } else: { @VAR i fact = 1iv 1iv; @LOOP while:(i <= n) { fact *= i++ }; } }; // ------------------ // Display factorials // ------------------ @VAR i = -1iv; @LOOP times:15 { @SAY «recursive » i «! = » (@fact_r i) between:""; @SAY «iterative » i «! = » (@fact_i i) between:""; i = 5iv * i / 4iv + 1iv; }; /]========================================================================================= Output: recursive -1! = -1 iterative -1! = -1 recursive 0! = 1 iterative 0! = 1 recursive 1! = 1 iterative 1! = 1 recursive 2! = 2 iterative 2! = 2 recursive 3! = 6 iterative 3! = 6 recursive 4! = 24 iterative 4! = 24 recursive 6! = 720 iterative 6! = 720 recursive 8! = 40320 iterative 8! = 40320 recursive 11! = 39916800 iterative 11! = 39916800 recursive 14! = 87178291200 iterative 14! = 87178291200 recursive 18! = 6402373705728000 iterative 18! = 6402373705728000 recursive 23! = 25852016738884976640000 iterative 23! = 25852016738884976640000 recursive 29! = 8841761993739701954543616000000 iterative 29! = 8841761993739701954543616000000 recursive 37! = 13763753091226345046315979581580902400000000 iterative 37! = 13763753091226345046315979581580902400000000 recursive 47! = 258623241511168180642964355153611979969197632389120000000000 iterative 47! = 258623241511168180642964355153611979969197632389120000000000