diff --git a/ex3/ex3.c b/ex3/ex3.c
index 4495373c8a5700b5c5ea2eb0794277598b799fcd..ea4461156ccca2838936231d7867249f2d52afb2 100644
--- a/ex3/ex3.c
+++ b/ex3/ex3.c
@@ -6,7 +6,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdbool.h>
 
 typedef struct list_t {
     int *value;
@@ -40,17 +39,31 @@ list *push(list *li, int *value, int *index) {
     return new;
 }
 
+void print_pascal(list *li, int pascal_size) {
+    list *current = li;
+    for (int i = 0; i < pascal_size; i++) {
+        if (current != NULL) {
+            printf("%d ", *current->value);
+            current = current->next;
+        }
+    }
+    printf("\n");
+}
+
 list *create_pascal_triangle(list *li, int pascal_size, int size_to_compute, int remaining_step) {
     if (remaining_step == 0 && size_to_compute == pascal_size) {
+        // End of the recursion
+        print_pascal(li, pascal_size);
         return li;
     }
     if (remaining_step == 0 && size_to_compute != pascal_size) {
-        create_pascal_triangle(li, pascal_size, size_to_compute + 1, size_to_compute + 1);
-        return li;
+        // Start calculating the next row
+        return create_pascal_triangle(li, pascal_size, size_to_compute + 1, size_to_compute + 1);
     }
 
     int index = *li->index + 1;
     if (remaining_step == 1 || remaining_step == size_to_compute) {
+        // Add the default value and the start and end of each rows
         int default_value = 1;
         li = push(li, &default_value, &index);
     } else {
@@ -58,6 +71,7 @@ list *create_pascal_triangle(list *li, int pascal_size, int size_to_compute, int
         list *current = li;
         int current_index = 0;
 
+        // Compute the value by searching the numbers at top and top left
         while (*current->index > *li->index - size_to_compute) {
             if (*current->index == *li->index - (size_to_compute - 1) ||
                 *current->index == *li->index - (size_to_compute - 2)) {
@@ -71,18 +85,8 @@ list *create_pascal_triangle(list *li, int pascal_size, int size_to_compute, int
     return create_pascal_triangle(li, pascal_size, size_to_compute, remaining_step - 1);
 }
 
-void print_pascal(list *li, int pascal_size) {
-    list *current = li;
-    for (int i = 0; i < pascal_size; i++) {
-        if (current != NULL) {
-            printf("%d ", *current->value);
-            current = current->next;
-        }
-    }
-    printf("\n");
-}
-
 int main() {
+    // Initialize the program
     int default_value = 1;
     int default_index = 0;
 
@@ -90,14 +94,16 @@ int main() {
     li->value = &default_value;
     li->index = &default_index;
 
+    // Get the pascal size from user
     int pascal_size;
     scanf("%d", &pascal_size);
 
+    // Create the triangle
     if (pascal_size > 1) {
         li = create_pascal_triangle(li, pascal_size, 2, 2);
     }
-    print_pascal(li, pascal_size);
 
+    // Free the memory and exit the program
     destroy(li);
     return EXIT_SUCCESS;
 }