diff --git a/slides/cours_8.md b/slides/cours_8.md
index 0415fe57dc017641a49ed4e0f651b70f0422a0fc..654c3c55175080ed9aa3d6efd0745f1e82ca0c6b 100644
--- a/slides/cours_8.md
+++ b/slides/cours_8.md
@@ -181,7 +181,7 @@ void nb_sol(board, co, count);
 void placer_devant(board_ini, board, li, co);
 ```
 
-# Le code du problème des 8 reines (1/N)
+# Le code du problème des 8 reines (2/N)
 
 ## Le calcul du nombre de solutions
 
@@ -191,19 +191,20 @@ nbr_solutions(board, colonne, compteur)
     // pour chaque ligne 
         // si la case libre
             // si la colonne < n - 1
-                // poser une reine et mettre à jour le tableau
+                // créer un nouveau board, poser une reine 
+                //     et mettre à jour le tableau
                 // nbr_solutions(board, colonne, compteur)
             // sinon
                 // on a posé la n-ème et on a gagné
                 // compteur += 1
 ```
 
-# Le code du problème des 8 reines (2/N)
+# Le code du problème des 8 reines (3/N)
 
 ## Le calcul du nombre de solutions
 
 ```C
-// Calcule le nombre de solutions au problème des <n> reines
+// Copier board, placer une reine et mettre à jour
 placer_devant(old_board, board, ligne, colonne)
     // board = copy(board); 
     // board est occupé à ligne/colonne
@@ -211,3 +212,4 @@ placer_devant(old_board, board, ligne, colonne)
         // suivantes sont mises à jour
 ```
 
+
diff --git a/source_codes/recursivity/.gitignore b/source_codes/recursivity/.gitignore
index bb7611bb8a5ed3c17bb1a2d73d12911687074756..26b8976e896cb74de02e2195fa0f46461fe78fed 100644
--- a/source_codes/recursivity/.gitignore
+++ b/source_codes/recursivity/.gitignore
@@ -1,5 +1,6 @@
 rec_fibonacci
 rec_reines
+rec_reines_no_alloc
 lissage
 rec_factorielle
 rec_pgcd
diff --git a/source_codes/recursivity/rec_reines_no_alloc.c b/source_codes/recursivity/rec_reines_no_alloc.c
new file mode 100644
index 0000000000000000000000000000000000000000..a1fd34b96212b05544f756bdcfc921afc7088db6
--- /dev/null
+++ b/source_codes/recursivity/rec_reines_no_alloc.c
@@ -0,0 +1,64 @@
+// Problème des N-reines
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void board_ini(int n, bool board[n][n], bool val) {
+    for (int i = 0; i < n; ++i) {
+        for (int j = 0; j < n; ++j) {
+            board[i][j] = val;
+        }
+    }
+}
+// Copie les valeurs de la board_ini dans board
+void copy(int n, bool board_ini[n][n], bool board[n][n]) {
+    for (int i = 0; i < n; i++) {
+        for (int j = 0; j < n; j++) {
+            board[i][j] = board_ini[i][j];
+        }
+    }
+}
+
+// Retourne une copie du tableau <board> complété avec les positions
+// prises sur la droite droite par une reine placée en <board(li,co)>
+void prises_devant(
+    int n, bool board_ini[n][n], bool board[n][n], int li, int co) {
+    copy(n, board_ini, board);
+    board[li][co] = false; // position de la reine
+    for (int j = 1; j < n - co; j++) {
+        // horizontale et diagonales à droite de la reine
+        if (j <= li) {
+            board[li - j][co + j] = false;
+        }
+        board[li][co + j] = false;
+        if (li + j < n) {
+            board[li + j][co + j] = false;
+        }
+    }
+}
+
+// Calcule le nombre de solutions au problème des <N> reines
+void nb_sol(int n, bool board_ini[n][n], int co, int *ptr_cpt) {
+    for (int li = 0; li < n; li++) {
+        if (board_ini[li][co]) {
+            if (co < n - 1) {
+                bool board[n][n];
+                prises_devant(n, board_ini, board, li, co);
+                nb_sol(n, board, co + 1, ptr_cpt);
+            } else {
+                *ptr_cpt = (*ptr_cpt) + 1;
+            }
+        }
+    }
+}
+
+void main() {
+    int n = 8;
+    // échiquier où placer les reines
+    bool board[n][n];
+    board_ini(n, board, true);
+    // compteur du nombre de solutions au problème des <N> reines
+    int cpt = 0;
+    nb_sol(n, board, 0, &cpt);
+    printf("Nombre de solutions: %d\n", cpt);
+}