diff --git a/examples/Factorial.zwei b/examples/Factorial.zwei new file mode 100755 index 0000000..e6e244b --- /dev/null +++ b/examples/Factorial.zwei @@ -0,0 +1,40 @@ +class Factorial { + + // Recursive definition + def factorial1(x: Int): Int = + if (x == 0) 1 + else x * this.factorial1(x - 1); + + // Tail-recursive definition + def factorial2_aux(x: Int, acc: Int): Int = + if (x == 0) acc + else this.factorial2_aux(x - 1, acc * x); + def factorial2(x: Int): Int = + this.factorial2_aux(x, 1); + + // Iterative definition + def factorial3(x: Int): Int = { + var p: Int = 1; + while (x > 0) { + set p = p * x; + set x = x - 1; + } + p + }; + +} + +class Example { + def main(): Null = { + var fac: Factorial = new Factorial(); + var x: Int = 5; + printInt(fac.factorial1(x)); + printChar(10); + printInt(fac.factorial2(x)); + printChar(10); + printInt(fac.factorial3(x)); + printChar(10); + }; +} + +new Example().main()