Exercice — dans l'esprit des sujets du bac
- Écrire la fonction récursive `Fact(n)` calculant .
- Identifier le cas de base et le cas récursif.
- Donner la trace d'exécution de `Fact(4)` (arbre d'appels et valeurs retournées).
- Écrire la fonction récursive `PGCD(a, b)` basée sur l'algorithme d'Euclide ( si , sinon ). Calculer `PGCD(48, 18)` en donnant la trace.
- Écrire la fonction récursive `Fib(n)` calculant le n-ième terme de la suite de Fibonacci (, , ).
- Donner la trace de `Fib(5)`.
- Expliquer pourquoi la version récursive de Fibonacci est inefficace et proposer une amélioration.
Voir la correction commentéeAprès avoir posé votre démarche
1. Factorielle récursive. Structure : cas de base + appel récursif.
TDOL : paramètre `n` (Type/Nature : entier ≥ 0) ; pas d'objet local obligatoire.
```
DEF FN Fact(n : entier) : entier
Début
Si n = 0 alors Retourner 1
Sinon Retourner n * Fact(n - 1)
Fin
```
Trace de Fact(4) :
- Fact(4) = 4 × Fact(3)
- Fact(3) = 3 × Fact(2)
- Fact(2) = 2 × Fact(1)
- Fact(1) = 1 × Fact(0) = 1 × 1 = 1
En remontant : On retourne 24.
2. PGCD récursif (Euclide). si , sinon .
```
DEF FN PGCD(a, b : entier) : entier
Début
Si b = 0 alors Retourner a
Sinon Retourner PGCD(b, a mod b)
Fin
```
Trace PGCD(48, 18) : (48,18)→(18,12)→(12,6)→(6,0). On retourne 6.
3. Fibonacci. , , .
```
DEF FN Fib(n : entier) : entier
Début
Si n < 2 alors Retourner n
Sinon Retourner Fib(n-1) + Fib(n-2)
Fin
```
Cas de base : n dans [0..1]. Version naïve : complexité exponentielle (recalculs) ; préférer l'itératif pour les grandes valeurs.
Équivalent Python (extrait).
```python
def fact(n):
if n == 0:
return 1
return n * fact(n - 1)
print(fact(4))
```