1.Une fonction récursive sans cas de base ne termine jamais, quels que soient ses paramètres.
2.Dépasser la limite de récursion de Python provoque un plantage silencieux, sans exception levée.
3.Dans la pile d’appels, l’enregistrement d’activation dépilé en premier est celui du tout premier appel effectué.
4.sys.setrecursionlimit(...) permet d’augmenter la limite de récursion sans aucun risque, quelle que soit la valeur choisie.
5.Dans la récursivité indirecte, une fonction f peut appeler une fonction g qui, à son tour, appelle f.
On considère la fonction suivante :
def mystere(n):
if n == 0:
return 0
return n + mystere(n - 1)
Identifier le cas de base et le cas récursif de mystere.
Le cas de base est n == 0, où la fonction renvoie directement 0 sans appel récursif. Le cas récursif est n > 0 (implicitement, puisque n est un entier naturel), où la fonction renvoie n + mystere(n - 1).
Donner la valeur renvoyée par mystere(4), en détaillant la suite des appels.
La phase de descente empile les appels sans encore rien calculer : mystere(4) appelle mystere(3), qui appelle mystere(2), qui appelle mystere(1), qui appelle mystere(0).
La phase de remontée calcule alors chaque résultat à partir du précédent : mystere(0) renvoie 0 ; mystere(1) renvoie 1 + 0 = 1 ; mystere(2) renvoie 2 + 1 = 3 ; mystere(3) renvoie 3 + 3 = 6 ; mystere(4) renvoie 4 + 6 = 10.
Ainsi mystere(4) renvoie 10 (la somme 1+2+3+4).
Écrire une fonction récursive somme_chiffres(n) qui renvoie la somme des chiffres d’un entier naturel n (par exemple, somme_chiffres(1234) doit renvoyer 10, car 1+2+3+4=10). Préciser le cas de base, le cas récursif, et un variant justifiant la terminaison.
def somme_chiffres(n):
if n < 10:
return n # cas de base : n a un seul chiffre
return n % 10 + somme_chiffres(n
Le cas de base est n < 10 : un entier à un seul chiffre est déjà sa propre somme de chiffres. Le cas récursif sépare le dernier chiffre (n % 10) du reste du nombre (`n
Un variant possible est n lui-même : pour n >= 10, `n
(Vérification : somme_chiffres(1234) calcule 4 + somme_chiffres(123) = 4 + (3 + somme_chiffres(12)) = 4 + 3 + (2 + somme_chiffres(1)) = 4 + 3 + 2 + 1 = 10.)
4 blocs de plus : les autres énoncés et tous les corrigés, rédigés en entier. Le reste du programme est écrit de la même main, avec les figures interactives et votre progression.