diff --git a/abs.lisp b/abs.lisp
index 2a4675e..988e8ab 100644
--- a/abs.lisp
+++ b/abs.lisp
@@ -4,5 +4,3 @@
   (if (< x 0)
       (- x)
       x))
-
-
diff --git a/factorial.lisp b/factorial.lisp
index e69de29..591dcd0 100644
--- a/factorial.lisp
+++ b/factorial.lisp
@@ -0,0 +1,6 @@
+(in-package :math-algo)
+
+(defun my-factorial (n)
+  (if (= n 1)
+       1
+       (* n (my-factorial (- n 1)))))
diff --git a/abs.lisp b/abs.lisp
index 2a4675e..988e8ab 100644
--- a/abs.lisp
+++ b/abs.lisp
@@ -4,5 +4,3 @@
   (if (< x 0)
       (- x)
       x))
-
-
diff --git a/factorial.lisp b/factorial.lisp
index 591dcd0..0371d59 100644
--- a/factorial.lisp
+++ b/factorial.lisp
@@ -1,6 +1,20 @@
 (in-package :math-algo)

-(defun my-factorial (n)
+(defun my-factorial-recu-impl (n)
   (if (= n 1)
        1
        (* n (my-factorial (- n 1)))))
+
+(defun my-factorial-iter-impl (n)
+  (defun my-factorial-iter (counter product)
+    (if (> counter n)
+        product
+        (my-factorial-iter (+ counter 1) (* product counter))))
+  (my-factorial-iter 1 1))
+
+
+(defun my-factorial-do-impl (n)
+  (do ((counter 1 (1+ counter))
+       (product 1 (* product counter)))
+      ((> counter n) product)))
+
diff --git a/packages.lisp b/packages.lisp
index 01f4cf6..601d45b 100644
--- a/packages.lisp
+++ b/packages.lisp
@@ -9,4 +9,6 @@
            my-abs
            my-average
            my-sqrt
-           my-factorial))
+           my-factorial-recu-impl
+           my-factorial-iter-impl
+           my-factorial-do-impl))