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()