Adloun

La récursivité n'est pas au programme de première

Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 3 — Langages et programmation · Aux frontières du programme

Énoncé

La récursivité n'est pas au programme de première. La rencontrer une fois permet de comprendre pourquoi. Écrire la factorielle en version itérative et en version récursive, vérifier qu'elles coïncident, puis chercher la limite de la seconde.

Corrigé


def factorielle_iterative(n):
    """n! par boucle bornee. Precondition : n entier >= 0."""
    p = 1
    for i in range(2, n + 1):
        p = p * i
    return p

def factorielle_recursive(n):
    """n! en s'appelant elle-meme. Precondition : n entier >= 0."""
    if n <= 1:            # cas de base : sans lui, aucun arret
        return 1
    return n * factorielle_recursive(n - 1)

for n in range(0, 200):
    assert factorielle_iterative(n) == factorielle_recursive(n) == math.factorial(n)

Les cas coïncident, et coïncident avec math.factorial.

La limite.


import sys
print(sys.getrecursionlimit())          # 1000
factorielle_recursive(100000)           # RecursionError: maximum recursion depth exceeded

La version itérative, elle, calcule sans difficulté — un nombre de plus de chiffres.

Ce que cela révèle. Chaque appel non terminé occupe un cadre dans la pile d'exécution : la récursion consomme de la mémoire proportionnellement à sa profondeur, là où la boucle n'en consomme pas du tout. Python fixe une limite de appels imbriqués, non par avarice, mais pour transformer une récursion sans fin en une erreur lisible plutôt qu'en un plantage de la machine.

Pourquoi elle est réservée à la terminale : la récursion demande de raisonner sur un cas de base et une décroissance — exactement le variant de boucle de ce chapitre, mais appliqué à un mécanisme qu'on ne voit pas se dérouler. Le programme de première préfère qu'on maîtrise d'abord la boucle, dont la trace s'écrit ligne à ligne, comme dans les premiers exercices de TD.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.