- class Factorial {
-
- // Recursive definition
- Int factorial1(Int x) {
- return if (x == 0) 1
- else x * this.factorial1(x - 1)
- }
-
- // Tail-recursive definition
- Int factorial2_aux(Int x, Int acc) {
- return if (x == 0) acc
- else this.factorial2_aux(x - 1, acc * x)
- }
- Int factorial2(Int x) {
- return this.factorial2_aux(x, 1)
- }
-
- // Iterative definition
- Int factorial3(Int x) {
- Int p = 1;
- while (x > 0) {
- p = p * x;
- x = x - 1;
- }
- return p
- }
-
- }
-
- class Example {
- Null main() {
- Factorial fac = new Factorial();
- Int x = 5;
- printInt(fac.factorial1(x));
- printChar(10);
- printInt(fac.factorial2(x));
- printChar(10);
- printInt(fac.factorial3(x));
- printChar(10);
- }
- }
-
- new Example().main()