On dispose d'un couloir rectangulaire de largeur 2 et de longueur n. On dispose de dalles de largeur 1 et longueur 2. On veut paver le couloir avec les dalles. La question est de connaître le nombre de pavages possible.
On différencie deux dallages par l'orientation des dalles (on suppose les dalles toutes de même couleur, les couleurs ci-dessous sont utilisées pour mieux visualiser les différentes dalles).
Proposer une fonction python récursive dénombrant ces pavages.
Exemple. Les 5 dallages possibles d'un couloir de longueur 4 :
- documentation
- principe
- un code
On trouvera la doc sur le module turtle ici.
Notons \( u_n \) le nombre de pavages du couloir de longueur \( n \). On a \( u_1=1\) et \(u_2 = 2\).
Pour paver un couloir de longueur \(n\) : on pose les dernières dalles et on est ainsi ramené à paver le début de couloir.
- Soit la dernière dalle est verticale et on peut daller de \( u_{n-1}\) façons différentes le début de couloir (de longueur \( n-1 \)).
- Soit la dernière dalle est horizontale (et donc en fait les deux dernières dalles) et on peut daller de \( u_{n-2} \) façons différentes le début de couloir (de longueur \(n-2 \)).
- Et les pavages cités dans le point 1 sont distincts des pavages du point 2 puisque la dernière dalle est différente dans les deux types de pavage.
On dispose donc maintenant d'un principe de récursion pour construire effectivement le dallage et d'une relation de récurrence pour les compter : \(u_n= u_{n-1}+u_{n-2} \).
def denombre_dallage( longueur_couloir, p1=1, p2=2) :
if longueur_couloir == 1 : return p1
elif longueur_couloir == 2 : return p2
else : return denombre_dallage(longueur_couloir-1, p2, p1+p2)
print("{} dallage pour un couloir de longueur {}.".format(denombre_dallage(1), 1))
for i in range(2,10) :
print("{} dallages différents pour un couloir de longueur {}.".format(denombre_dallage(i), i))