ajout de tous les cours et TP préparés cet été
This commit is contained in:
103
Recursivité/TP/TP_recursivite.md
Normal file
103
Recursivité/TP/TP_recursivite.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# TP Récursivité
|
||||
|
||||
------
|
||||
|
||||
## 1. Courbe de Koch
|
||||
|
||||
> Prérequis : Module turtle
|
||||
|
||||
La courbe de Koch est une figure fractale récursive. Elle fait partie des premières fractales décrites mathématiquement (1904).
|
||||
|
||||
### Principe de construction
|
||||
|
||||
**Ordre 0** : Un simple segment de longueur `cote`.
|
||||
|
||||
```
|
||||
─────────────────────
|
||||
```
|
||||
|
||||
**Ordre 1** : Le segment est divisé en 3 parties égales. La partie centrale est remplacée par deux segments formant un triangle équilatéral sans sa base (un "chapeau" ^).
|
||||
|
||||
```
|
||||
/\
|
||||
/ \
|
||||
──────/ \──────
|
||||
```
|
||||
|
||||
**Ordre 2 et suivants** : On applique la même transformation à chaque segment de la figure précédente.
|
||||
|
||||
```
|
||||
/\
|
||||
/ \ /\
|
||||
/ \ / \
|
||||
─/ \──/ \─
|
||||
```
|
||||
|
||||
### Questions
|
||||
|
||||
1. Écrire de manière récursive le code de la fonction `courbe_koch(n, cote)` permettant de dessiner cette courbe à l'ordre `n` avec des segments de longueur `cote`.
|
||||
|
||||
Nous voulons obtenir maintenant un **flocon de Koch**. Celui-ci est composé de trois courbes de Koch disposées en triangle équilatéral.
|
||||
|
||||
2. Écrire le code de la fonction `flocon(n, cote)` qui dessine le flocon de Koch.
|
||||
|
||||
> **Indice** : Le flocon est formé de 3 courbes de Koch, avec un angle de 120° entre chaque courbe.
|
||||
|
||||
---
|
||||
|
||||
## 2. Triangle de Pascal
|
||||
|
||||
Le triangle de Pascal représente les coefficients binomiaux sous la forme d'un triangle :
|
||||
|
||||
```
|
||||
1
|
||||
1 1
|
||||
1 2 1
|
||||
1 3 3 1
|
||||
1 4 6 4 1
|
||||
1 5 10 10 5 1
|
||||
```
|
||||
|
||||
La fonction `coef(n, p)` permet de calculer le coefficient à la ligne `n` et colonne `p` :
|
||||
|
||||
$$
|
||||
coef(n, p) = \begin{cases}
|
||||
1 & \text{si } p = 0 \text{ ou } n = p\\
|
||||
coef(n-1, p-1) + coef(n-1, p) & \text{sinon}
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
### Questions
|
||||
|
||||
1. Écrire le code de la fonction récursive `coef(n, p)`.
|
||||
|
||||
Le sommet du triangle est le résultat de `coef(0, 0)`, la première ligne est représentée par `coef(1, 0)` et `coef(1, 1)`, ainsi de suite pour les autres lignes.
|
||||
|
||||
2. À l'aide de deux boucles, écrire un code permettant d'afficher les 6 premières lignes du triangle.
|
||||
|
||||
---
|
||||
|
||||
## 3. Recherche dichotomique
|
||||
|
||||
La recherche dichotomique fonctionne sur un tableau trié et permet de trouver un élément de façon optimale en O(log n).
|
||||
|
||||
Voici le code de la recherche dichotomique (programme de 1ère) de manière itérative :
|
||||
|
||||
```python
|
||||
def recherche_dichotomique(t, v):
|
||||
debut = 0
|
||||
fin = len(t) - 1
|
||||
while debut <= fin:
|
||||
milieu = (debut + fin) // 2
|
||||
if t[milieu] == v:
|
||||
return True
|
||||
elif t[milieu] > v:
|
||||
fin = milieu - 1
|
||||
else:
|
||||
debut = milieu + 1
|
||||
return False
|
||||
```
|
||||
|
||||
### Question
|
||||
|
||||
1. Réécrire ce code en version récursive. La fonction prendra en paramètres le tableau `t`, la valeur cherchée `v`, ainsi que les indices `debut` et `fin`.
|
||||
Reference in New Issue
Block a user