Algorithme recursif
Fermé
tchsimons
Messages postés
191
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
24 novembre 2012
-
26 déc. 2008 à 17:14
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 26 déc. 2008 à 20:23
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 26 déc. 2008 à 20:23
A voir également:
- Algorithme recursif
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Code ascii algorithme - Guide
- Tester un algorithme en ligne - Forum Programmation
- Algorithme qui calcule le carré d'un nombre - Forum Algorithmes / Méthodes
3 réponses
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
26 déc. 2008 à 17:51
26 déc. 2008 à 17:51
return ((n == 0) ? 1 : n * factorielle(n - 1));
Ceci est un test, si n = 0 alors il retourne 1, sinon, il retourne n multiplié par la factorielle de (n - 1).
Prenons par exemple n = 3 :
Il rentre dans la fonction, n n'est pas égal à 0, il retourne donc 3 * factorielle(2)
factorielle(2) :
en appellant cette méthode il va de nouveau tester si 2 == 0 or ce n'est pas le cas, il va donc retourner 2 * factorielle(1)
On peut donc désormais écrire notre retour "3 * factorielle(2) sous cette forme : 3 * 2 * factorielle(1)
factorielle(1)
cette fois ci encore, 1 n'est pas égal à zéro, il retourne donc 1 * <gras>factorielle(0)</gras>
Et maintenant on peux écrire notre retour initial sous la forme de "3 * 2 * 1 * factorielle(0)"
factorielle(0)
0 est bien égal à zéro, il retourne donc 1 (et ne s'appelle plus lui même).
On obtient donc au final à travers ces appels successifs de la méthode factorielle : "3 * 2 * 1 *1 ce qui nous donne bien 6 qui est la factorielle de 3.
On peux utiliser la méthaphore d'une série d'étudiants qui sont en lignes devant le professeur au garde a vous, le professeur va dire au premier étudiant : calcule moi la factorielle de 4, le premier étudiant, pas bête, sait qu'il lui suffit de multiplier 4 à la factorielle de 3 pour donner la réponse au professeur. Il demande donc à l'étudiant derrière lui de lui donner la factorielle de 3. L'étudiant derrière lui fait pareil avec celui qui se trouve derrière lui en lui demandant la factorielle de 2, puis celui-là demande au suivant la factorielle de 1 et lui il demande encore derrière lui ce que vaut la factorielle de zéro. Le type à qui on demande la factorielle de zéro, il sait que ça vaut 1 il répond donc 1 a celui devant lui, qui calcule que 1 * 1 = 2 et il répond alors 2 au type devant lui, qui lui calcule 2 * 3 = 6 et répond donc 6 au type devant lui qui peux donc faire 4 * 6 = 24, ce qu'il répond au professeur devant lui bravement.
Le travail a donc été répartit entre chaqu'un des étudiants et chacun d'eux n'a fourni qu'un petit travail servant à calculer un gros travail (bien qu'ici la factorielle de 4 ne soit pas un très gros travail ^^).
Voilà après je te conseil d'aller chercher des définition sur google ou wikipédia si tu pige pas bien car là ça me gave de taper plus xD
Ceci est un test, si n = 0 alors il retourne 1, sinon, il retourne n multiplié par la factorielle de (n - 1).
Prenons par exemple n = 3 :
Il rentre dans la fonction, n n'est pas égal à 0, il retourne donc 3 * factorielle(2)
factorielle(2) :
en appellant cette méthode il va de nouveau tester si 2 == 0 or ce n'est pas le cas, il va donc retourner 2 * factorielle(1)
On peut donc désormais écrire notre retour "3 * factorielle(2) sous cette forme : 3 * 2 * factorielle(1)
factorielle(1)
cette fois ci encore, 1 n'est pas égal à zéro, il retourne donc 1 * <gras>factorielle(0)</gras>
Et maintenant on peux écrire notre retour initial sous la forme de "3 * 2 * 1 * factorielle(0)"
factorielle(0)
0 est bien égal à zéro, il retourne donc 1 (et ne s'appelle plus lui même).
On obtient donc au final à travers ces appels successifs de la méthode factorielle : "3 * 2 * 1 *1 ce qui nous donne bien 6 qui est la factorielle de 3.
On peux utiliser la méthaphore d'une série d'étudiants qui sont en lignes devant le professeur au garde a vous, le professeur va dire au premier étudiant : calcule moi la factorielle de 4, le premier étudiant, pas bête, sait qu'il lui suffit de multiplier 4 à la factorielle de 3 pour donner la réponse au professeur. Il demande donc à l'étudiant derrière lui de lui donner la factorielle de 3. L'étudiant derrière lui fait pareil avec celui qui se trouve derrière lui en lui demandant la factorielle de 2, puis celui-là demande au suivant la factorielle de 1 et lui il demande encore derrière lui ce que vaut la factorielle de zéro. Le type à qui on demande la factorielle de zéro, il sait que ça vaut 1 il répond donc 1 a celui devant lui, qui calcule que 1 * 1 = 2 et il répond alors 2 au type devant lui, qui lui calcule 2 * 3 = 6 et répond donc 6 au type devant lui qui peux donc faire 4 * 6 = 24, ce qu'il répond au professeur devant lui bravement.
Le travail a donc été répartit entre chaqu'un des étudiants et chacun d'eux n'a fourni qu'un petit travail servant à calculer un gros travail (bien qu'ici la factorielle de 4 ne soit pas un très gros travail ^^).
Voilà après je te conseil d'aller chercher des définition sur google ou wikipédia si tu pige pas bien car là ça me gave de taper plus xD
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
26 déc. 2008 à 17:24
26 déc. 2008 à 17:24
Une méthode récursive fait appel à elle même.
Voici un exemple de méthode pour obtenir la factorielle d'un nombre de façon itérative puis récursive (la méthode s'appelle elle même).
En Java la récursivité n'est pas terminale donc elle bouffe vite beaucoup de mémoire dans des situations où elle pourrait en gagner énormément.
Voici un exemple de méthode pour obtenir la factorielle d'un nombre de façon itérative puis récursive (la méthode s'appelle elle même).
// n >= 0 public static int factorielleIterative(int n) { int r = 1; for (int i = 1; i <= n; i++) { r = r * 1; } return r; } // n >= 0 public static int factorielleRecursive(int n) { return ((n == 0) ? 1 : n * factorielle(n - 1)); }
En Java la récursivité n'est pas terminale donc elle bouffe vite beaucoup de mémoire dans des situations où elle pourrait en gagner énormément.
tchsimons
Messages postés
191
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
24 novembre 2012
14
26 déc. 2008 à 17:36
26 déc. 2008 à 17:36
j'aimerai comprendre le passage des parametre.et la condition d'arret ,puisque j'ai l'impression qu'il fonctionne comme une boucle
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
26 déc. 2008 à 20:23
26 déc. 2008 à 20:23
Note qu'il faut toujours un peu de temps pour bien comprendre la logique récursive.
C'est à force de pratiquer qu'on finit par l'intégrer.
Moi personnellement j'ai mis du temps avant de comprendre. Mais maintenant ça me parait assez naturel, à force de pratiquer...
C'est à force de pratiquer qu'on finit par l'intégrer.
Moi personnellement j'ai mis du temps avant de comprendre. Mais maintenant ça me parait assez naturel, à force de pratiquer...