nsi:terminales:recursivite:exemples
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| nsi:terminales:recursivite:exemples [2021/10/24 17:06] – créée goupillwiki | nsi:terminales:recursivite:exemples [2023/03/17 13:41] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. 193.51.53.161 | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ===== Triangle de Sierpinski ====== | ===== Triangle de Sierpinski ====== | ||
| + | Il s'agit d'une figure construite récursivement. On peut définir '' | ||
| + | * '' | ||
| + | * '' | ||
| + | {{ : | ||
| + | |||
| + | |||
| + | La construction nous indique que : | ||
| + | * pour '' | ||
| + | * pour '' | ||
| + | * pour '' | ||
| + | * on comprend que pour '' | ||
| + | |||
| + | On peut faire le tracer en utilisant le module '' | ||
| + | |||
| + | <code python linenums: | ||
| + | from turtle import * | ||
| + | speed(100) | ||
| + | pensize(1) | ||
| + | setheading(0) # orientation vers l'est | ||
| + | |||
| + | # votre programme ici | ||
| + | |||
| + | |||
| + | # fin du programme | ||
| + | exitonclick() | ||
| + | </ | ||
| + | |||
| + | Quelques commandes dans ce [[nsi: | ||
| + | |||
| + | <WRAP box> | ||
| + | |||
| + | <WRAP tip>Sur le même principe, [[https:// | ||
| + | |||
| + | ===== Tours de Hanoï ===== | ||
| + | |||
| + | Dans [[: | ||
| + | |||
| + | Un solution très simple de ce problème passe par une fonction récursive. | ||
| + | |||
| + | On veut déplacer une pile de N cylindres de la position A à la position B. Pour cela, il faut : | ||
| + | * déplacer N-1 cylindres de A à C, | ||
| + | * déplacer le cylindre N de A à B, | ||
| + | * déplacer N-1 cylindres de C à B, | ||
| + | |||
| + | <WRAP box> | ||
| + | |||
| + | ===== Mesures d'un arbre ===== | ||
| + | |||
| + | Dans cet [[nsi: | ||
| + | |||
| + | <WRAP tip>Une liste chaînée peut être vue comme un arbre spécial -- un nœud n'a qu'un enfant -- et on pourrait donc appliquer la même méthode pour obtenir la longueur d'une liste.</ | ||
| + | |||
| + | ===== Sac à dos ===== | ||
| + | |||
| + | ==== Rappel ==== | ||
| + | |||
| + | Ce problème a été vu en première dans le cadre de l' | ||
| + | * On dispose d'un sac de capacité C, | ||
| + | * d'un assortiment d' | ||
| + | * On cherche à placer des objets dans le sac en respectant la contrainte de capacité et en maximisant la valeur totale du contenu du sac. | ||
| + | |||
| + | **Exemple :** On dispose d'un sac d'une capacité de C = 15 kg et de la liste d' | ||
| + | |||
| + | ^ nom ^ Valeur ^ Poids ^ | ||
| + | | A | 80 | 8 | | ||
| + | | B | 32 | 2 | | ||
| + | | C | 20 | 5 | | ||
| + | | D | 126 | 14 | | ||
| + | | E | 5 | 1 | | ||
| + | | F | 18 | 6 | | ||
| + | |||
| + | Quel objet doit-on prendre pour maximiser la valeur contenue dans le sac ? | ||
| + | |||
| + | ==== Solution récursive ==== | ||
| + | |||
| + | Supposons que j' | ||
| + | aurait enlevé les lignes A et B. | ||
| + | |||
| + | Supposons que je calcule '' | ||
| + | * Soit on ne prend pas A. Dans ce cas le meilleur sac possible est obtenu avec '' | ||
| + | * Soit on prend A. Dans ce cas, on occupe 8 kg de la capacité du sac. Il reste 7 kg de capacité. On peut se demander comment occuper au mieux ces 7 kg en demandant '' | ||
| + | * Les deux options précédentes nous donne 2 choix de sac. Il faut sélectionner le meilleur des deux. | ||
| + | |||
| + | <WRAP box> | ||
| + | |||
| + | <code lang-none> | ||
| + | FONCTION meilleur_sac | ||
| + | ENTRÉES: | ||
| + | c : capacité restante | ||
| + | | ||
| + | SORTIE: le sac formé d'un choix dans la liste items, | ||
| + | qui forme le meilleur sac possible avec la capacité c | ||
| + | DÉBUT | ||
| + | SI items vide ou c < = 0 ALORS | ||
| + | dans ce cas, on ne peut rien mettre dans le sac donc | ||
| + | | ||
| + | FIN SI | ||
| + | soit A le premier item parmi les items à choisir | ||
| + | (A existe forcément puisque si items vide, on aurait déjà fini) | ||
| + | | ||
| + | |||
| + | on forme un premier essai de sac, appelé sac1. Dans ce sac on place A | ||
| + | il reste donc c - poids(A) de capacité que l'on peut remplir avec items_sans_A | ||
| + | en résumé, sac1 = A + meilleur_sac(c - poids(A), items_sans_A) | ||
| + | à noter : il se pourrait que ce sac ne soit pas valide. En effet, il se peut | ||
| + | que poids(A) > c. | ||
| + | |||
| + | on forme un autre sac, sac2, qui ne contient pas A. On dispose donc de la totalité | ||
| + | de la capacité pour former un sac au mieux avec les autres items. | ||
| + | donc sac2 = meilleur_sac(c, | ||
| + | à noter : ce sac est forcément valide. | ||
| + | |||
| + | | ||
| + | SI le sac1 est valide et qu'il a une valeur plus grande que sac2 ALORS | ||
| + | | ||
| + | SINON | ||
| + | | ||
| + | FIN | ||
| + | FIN | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | <WRAP tip> | ||
nsi/terminales/recursivite/exemples.1635087974.txt.gz · Dernière modification : de goupillwiki
