INTRODUCTION |
Vous vous rappelez peut-être de l’étrange histoire de l’homme à la dent creuse que l’on raconte volontiers aux petits enfants :
|
|
ESCALIERS RÉCURSIFS |
Admettons qu’il nous soit demandé de construire un escalier de trois marches. Au lieu de construire trois marches l’une après l’autre, on peut imaginer un escalier de trois marches comme une marche de longueur 3 surmontée d’un escalier de deux marches. Cet escalier de deux marches est alors constitué d’une marche de longueur 2 surmontée d’un escalier à une marche.
Il ne reste plus qu’à instruire la tortue sur la façon de construire une marche de taille n en définissant la fonction step(). Il suffit ensuite d’appeler stairs(3) pour dessiner un escalier de trois marches. Notre programme ne fonctionnerait cependant pas en l’état, car il ne traite pas le cas de base d’un escalier à zéro marche. On peut facilement régler ce problème avec une condition if : if n == 0: return L’instruction return interrompt l’exécution de la fonction, ce qui a pour effet d’interrompre le travail actuel et de retourner au travail en cours avant le dernier appel à step(). Voici à quoi devrait ressembler le programme après cet ajout indispensable: from gturtle import * def stairs(n): if n == 0: return step() stairs(n - 1) def step(): forward(50) right(90) forward(50) left(90) makeTurtle() fillToHorizontal(0) stairs(3) |
MEMENTO |
La récursion est une méthode de résolution de problème essentielle en mathématiques et en informatique consistant à résoudre un problème en le transformant un en problème de même nature mais légèrement simplifié. Ainsi, dans une récursion directe, si f est une fonction qui qui fournit la solution cherchée, f est réutilisée dans sa propre définition [plus... Dans le cas d’une récursion indirecte, d’autres fonctions qui font appel à f sont utilisées pour définir la fonction f elle-même]. De prime abord, il peut paraître étrange de vouloir résoudre un problème par une méthode qui présuppose la connaissance de sa solution. Il faut noter cependant que la définition récursive ne présuppose pas la solution du même problème, mais d’un problème similaire de taille réduite, plus proche de la solution cherchée. Pour réduire la taille du problème, on définit la fonction récursive f avec un paramètre n def f(n):
...
def f(n):
...
f(n-1)
...
def f(n): if n == 0: return ... f(n - 1) ... |
L’ARBRE DE PYTHAGORE |
Il est bien établi que l’implémentation d’un programme récursif est inhabituelle. De ce fait, voici une procédure servant de guide dans l’élaboration de ce programme:
from gturtle import * import math def tree(s): if s < 2: return square(s) forward(s) s1 = s / math.sqrt(2) left(45) tree(s1) right(90) forward(s1) tree(s1) back(s1) left(45) back(s) def square(s): repeat 4: forward(s) right(90) makeTurtle() ht() setPos(-50, -200) tree(100) |
MEMENTO |
Lorsqu’on dessine des motifs récursifs avec la tortue, il est très important qu’elle retrouve sa position et son orientation initiale après avoir effectué le dessin. |
EXERCICES |
|