[PHP] apprendre la récursivité (jeu des tours de hanoi)
|
12-02-2013, 00h32
(Modification du message : 12-02-2013, 11h41 par JadnX.)
Message : #1
|
|
JadnX
Membre actif Messages : 62 Sujets : 6 Points: 9 Inscription : Jun 2011 |
[PHP] apprendre la récursivité (jeu des tours de hanoi)
Salut à tous,
Je vous partage un cours que j'ai eu sur la programmation, l'objectif est d'apprendre la récursivité, grâce à un jeu qui s'appel " Les Tours d'Hanoï ". Je vais vous décrire, ou plutôt wiki, brièvement le principe du jeu: Wiki a écrit : Le problème des tours de Hanoï est un jeu de réflexion imaginé par le mathématicien français Édouard Lucas, et consistant à déplacer des disques de diamètres différents d'une tour de «départ» à une tour d'«arrivée» en passant par une tour «intermédiaire», et ceci en un minimum de coups, tout en respectant les règles suivantes :Merci Wikipedia ! :p C'est bien beau, mais la récursivité quésaco..!? La récursivité pour une fonction c'est le fait de faire appel à elle même, c'est un espèce d'empilage de la même fonction ! Prenez par exemple le film INCEPTION avec Leonardo DiCaprio , ils descendent à travers plusieurs niveaux de rêves (des rêves imbriqués les un dans les autres) pour pouvoir arriver à un résultat qui est d'introduire une idée dans l'esprit d'un bouffon. (mes excuses aux fans !) Dans notre cas : Le résultat est de trouver les déplacements à faire pour pouvoir déplacer la pile de disques. La fonction, n'est pas le rêve mais, c'est le mouvement à répéter pour pouvoir arriver au résultat. Problème, comment trouver le mouvement !? On va donner des nom à nos trois tours ! Celle la plus à gauche sera la tour de départ ($td) la tour du milieu intermédiaire ($ti) et celle de droite la tour d'arrivé ($ta). Résolvons le jeu avec 3 disques et relevons les mouvements. (simple non ? ) Vous pouvez testé ICI: td -> ta td -> ti ta -> ti td -> ta ti -> td ti -> ta td -> ta Bien maintenant interprétons : 1) on part du départ pour tous stocker sur l'intermédiaire ! td -> ta td -> ti ta -> ti on résume => td devient ti et ti devient td 2) on fait le but du jeu on va du départ à l’arrivé ! td -> ta 3) on prend ce qu'on a stocker sur l'intermédiaire pour le mettre sur l'arrivé ! ti -> td ti -> ta td -> ta on résume => ti devient ta et ta devient ti Application PHP: On va donc crée la fonction principale hanoi qui va nous permettre d'arrivé au résultat (déplacement du 2 ci dessus): Code PHP : hanoi($td, $ti, $ta){} //on met en paramètres le départ l'intermédiaire et l'arrivé. On fait la fonction pour le 1er déplacement (déplacement du 3 ci dessus): Code PHP : hanoi($td,$ta,$ti); //ti devient ta et ta devient ti. On fait la fonction pour le 2eme déplacement (déplacement du 1 ci dessus): Code PHP : hanoi($ti, $td, $ta); //td devient ti et ti devient td. Si vous m'avez suivis jusque là c'est bien, le plus gros est fait ! On construit la fonction pour 3 disques : Code PHP : function hanoi($td,$ti,$ta){ // pour aller au résultat On y ajoute le nombre de disque pour pouvoir faire les déplacement, ainsi qu'une vérification inutile de faire les déplacement si il n'y a qu'un disque : Code PHP : function hanoi($nb, $td, $ti, $ta) { Pour finir on y ajoute un formulaire pour demander le nombre de disques à l'utilisateur : Code PHP : header('Content-type: text/html; charset=utf-8'); Voila pour la récursivité on utilise la fonction hanoi dans la fonction hanoi... Un rêve dans un rêve dans un rêve... N’hésitez pas à m’envoyer un message pour corriger d’éventuelles erreurs ou fautes d’orthographes. Un merci fait toujours plaisir ! En espèrent vous aider autant que vous le faites pour moi, Cordialement, JadnX
Big n-pn is watching you !
|
|
12-02-2013, 04h46
(Modification du message : 12-02-2013, 04h47 par InstinctHack.)
Message : #2
|
|
InstinctHack
Posting Freak Messages : 1,366 Sujets : 184 Points: 299 Inscription : Dec 2011 |
RE: [PHP] apprendre la récursivité (jeu des tours de hanoi)
Merci du tuto
Autre exemple, peut-etre plus parlant, celle du parcours récursive d'un dossier, compliqué à mettre en place sans appeller une fonction par elle-meme Et voilà un exemple de code simple à comprendre : Code PHP :
source : http://www.viaphp.net/portions/fichiers-...repertoire Et pour finir, celle de la fonction mathématiques factorielle (qui définie x multiplier par tous les entiers positifs inférieurs à lui) en gros 4! == 4*3*2*1 == 4*3*2 (elle représente par exemple, le nombre d'ordres possible avec des élements) avec 3 boules : [1] [2] [3] les ordres possibles sont: [1] [2] [3] [1] [3] [2] [2] [1] [3] [2] [3] [1] [3] [1] [2] [3] [2] [1] Bien que php possède des fonctions mathématiques (http://php.net/manual/fr/book.math.php), ainsi que des modules (http://www.php.net/manual/fr/ref.gmp.php) il est facile de coder soi-même cette fonction voici donc l'équivalent de la fonction http://www.php.net/manual/fr/function.gmp-fact.php Code PHP :
Le code est extrait du ce tuto http://www.siteduzero.com/informatique/t...tilisation voilà pour un petit rajout sympa Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!" |
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
Apprendre JavaScript en s'amusant ! | Booster2ooo | 6 | 343 |
25-11-2013, 23h08 Dernier message: saywoot |
|
Apprendre le python en s'amusant ! | Trivial | 6 | 507 |
20-11-2013, 21h15 Dernier message: saywoot |
|
[Python] Meilleur endroit pour apprendre | ...:: BliNK ::... | 3 | 200 |
10-06-2012, 06h41 Dernier message: fr0g |
Utilisateur(s) parcourant ce sujet : 2 visiteur(s)