From c9ee10e59a09c313af3392ae08ff42e0e31e207b Mon Sep 17 00:00:00 2001 From: Emmanuel SRIVASTAVA TIAMZON Date: Fri, 5 Dec 2025 08:51:14 +0100 Subject: [PATCH] Upload files to "DEV.3.2/cours" --- DEV.3.2/cours/2.Récursivité.md | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 DEV.3.2/cours/2.Récursivité.md diff --git a/DEV.3.2/cours/2.Récursivité.md b/DEV.3.2/cours/2.Récursivité.md new file mode 100644 index 0000000..2131f3e --- /dev/null +++ b/DEV.3.2/cours/2.Récursivité.md @@ -0,0 +1,41 @@ +### Principe +- Une méthode récursive est une méthode qui s'appelle elle-même. + +Pour entrer une récursion sans fin, on doit prévoir dans la méthode : +- Un cas récursif +- Un cas de base +- Un test pour choisir le cas basé sur les informations entrantes +Il ne peut pas y avoir de compteur car à chaque appel on refait l'initialisation (repart à 0). Si l'on veut un compteur, ça doit être un paramètre. +Typiquement, cela signifie que les arguments d'appel changent à chaque appel. Dans le cas d'un objet, on peut changer ses attributs plutôt que de changer d'objet. Attention à prendre en compte l'objet d'appel. + +Ex : +```java +public static int multiply(int a, int b) { + if(a = 0) { + return 0 // cas d'arrêt + } else { + return multiply(a>>1, b<<1) + // a >> 1 : décale à droite (division par 2), b << 1 : décale à gauche (multiplication par 2) + (a&1)?b:0; // Si a est impair (a & 1 teste le bit de poids faible), on ajoute b, sinon on ajoute 0. + } +} + +multiply(5,8) + |->multiply(2,16) + | |->multiply(1,32) + | | |-> multiply(0,64) + | | | |->0 + |->40 |->32 |-> 32 <-| +``` + +Dans le cas d'une récursivité simple, on a une "phase ascendante" qui répète le code de la méthode se trouvant avant l'appel récursif, pas une exécution du cas de base, puis une phase descendante qui répète le code placé après l'appel récursif dans le sens inverse. + +Ex : +```java +public static int binomial(int n, int k) { + if ((k == 0) || (k == n)) { + return 1; + } else { + return binomial(n-1,k) + binomial(n-1,k-1); + } +} +```