From be2c8cd14045bc9fd4d6c30dfa6110a651c03064 Mon Sep 17 00:00:00 2001 From: Darciaux Yoann <yoann.darciaux3@etu.univ-lorraine.fr> Date: Sun, 30 Mar 2025 13:41:09 +0200 Subject: [PATCH] Ajout du dernier exercice et fin du compte rendu --- compte_rendu_debug.txt | 66 ++++++++++++++++++++++++++++++++++++++++++ exo8.ts | 14 +++++++++ 2 files changed, 80 insertions(+) create mode 100644 exo8.ts diff --git a/compte_rendu_debug.txt b/compte_rendu_debug.txt index 8ee0877..21eb9dc 100644 --- a/compte_rendu_debug.txt +++ b/compte_rendu_debug.txt @@ -47,3 +47,69 @@ J'ai modifié mon programme pour qu'avant d'entrer dans la boucle, le programme Les test avec les valeurs données fonctionnent dans cette exercice, j'ai appris à gerer des nombres négatifs dans un algorithme, optimisation des boucles ainsi qu'à utiliser le débogage dans des situations concrètes + +Exercice 8: +Prenons comme exemple n=5, voici les différentes étapes: + +Étape 1 : Appel initial deb8(5) +Paramètre n : 5. +Mémoire : valeur pas encore calculée. +Appel récursif : deb8(4). + +Étape 2 : Appel récursif deb8(4) +Paramètre n : 4. +Mémoire :valeur pas encore calculée. +Appel récursif : deb8(3). + +Étape 3 : Appel récursif deb8(3) +Paramètre n : 3. +Mémoire : pas encore calculée. +Appel récursif : deb8(2). + +Étape 4 : Appel récursif deb8(2) +Paramètre n : 2. +Mémoire :valeur pas encore calculée. +Appel récursif : deb8(1). + +Étape 5 : Appel récursif deb8(1) +Paramètre n : 1. +Mémoire :valeur pas encore calculée. +Appel récursif : deb8(0). + +Étape 6 : Appel récursif deb8(0) (cas de base) +Paramètre n : 0. +Mémoire : Retourne 1 (cas de base). + +Étape 7 : Résolution des appels récursifs +Les appels récursifs se résolvent dans l'ordre inverse : + +deb8(1) : + +valeur = 1 * 1 = 1. +Retourne 1. +deb8(2) : + +valeur = 2 * 1 = 2. +Retourne 2. +deb8(3) : + +valeur = 3 * 2 = 6. +Retourne 6. +deb8(4) : + +valeur = 4 * 6 = 24. +Retourne 24. +deb8(5) : + +valeur = 5 * 24 = 120. +Retourne 120. + +États finaux de la mémoire +Paramètre global n : 5. +Valeur finale retournée : 120. + +Un nom plus approprié pour cette fonction serai donc calculeFactorielle, car la fonction calcule la factorielle d'un nombre + +La fonction fonctionne correctement pour des valeurs positives de n, cependant, elle ne gère pas les cas où n est négatif, ce qui entraînerait une récursion infinie et un dépassement de pile. +Pour éviter les problèmes avec des valeurs négatives, j'ai ajouter une vérification au début de la fonction pour s'assurer que n est un entier positif ou nul, si n est négatif, je fais lever une exception. De plus je vais faire une version itérative pour otpimiser le programme car la version actuelle utilise une approche récursive qui peut entraîner un dépassement de pile pour des valeurs de n très grandes + diff --git a/exo8.ts b/exo8.ts new file mode 100644 index 0000000..eb0597b --- /dev/null +++ b/exo8.ts @@ -0,0 +1,14 @@ +let n = 5; +console.log(calculerFactorielle(n)); + +function calculerFactorielle(n: number): number { + if (n < 0) { + throw new Error("La factorielle n'est pas définie pour les nombres négatifs."); + } + let resultat = 1; + for (let i = 1; i <= n; i++) { + resultat *= i; + } + return resultat; +} + -- GitLab