Aller au contenu

Un mot pour Fahmio

Tu écris. Tu continues.

Un problème, une idée — assez pour qu’on comprenne, puis tu retournes à ta copie.

On lit. Tu n’as rien d’autre à faire.

Où veux-tu aller ?

↑ ↓ pour parcourir · Entrée pour ouvrir · Échap pour fermer

Fahmio
Fahmio
Bac Tunisie
RV-CRécursivité

Fonction récursive inconnue : type de retour, condition d’arrêt, trace des appels, rôle, version itérative

Idée directrice

L’épreuve d’algorithmique de la section Sciences de l’informatique donne parfois une fonction récursive dont on tait le rôle (Inconnue, Quoi…) — les deux sessions 2026 l’ont posée en exercice 1 : on la lit, on ne l’écrit pas. Le type de retour se déduit de ce que retournent toutes les branches ; la condition d’arrêt est le test qui termine les appels, pas l’instruction qui le suit ; la trace se fait en deux temps — les appels s’empilent en réduisant l’argument jusqu’au cas d’arrêt, puis les valeurs remontent et chaque appel achève son calcul. Comparer les résultats aux arguments donne le rôle en une phrase ; les séries demandent ensuite la même fonction sans récursivité.

Ce qui aide à reconnaître la démarche

« Soit l’algorithme de la fonction Inconnue suivant » ; « Donner le type de retour de la fonction » ; « La condition d’arrêt du traitement récursif est » ; « Déterminer la valeur retournée par la fonction … pour chacun des … appels suivants » ; « Donner la trace d’exécution de la fonction » ; « En déduire le rôle de la fonction » ; « Ecrire cette fonction avec une version itérative »

Besoin d’un point de départ ? Voir la méthode
  • Type de retour : parcourir toutes les instructions Retourner (ou Inconnue ← … dans l’ancienne écriture) — Vrai/Faux donne Booléen, une concaténation ou Effacer donne une Chaîne, une division / donne un Réel, des sommes et produits d’entiers donnent un Entier.
  • Condition d’arrêt : c’est le test qui termine les appels (y = 0, Long(ch) = 0, deb > fin), jamais l’instruction exécutée quand il est vrai ; vérifier aussi qu’un argument diminue strictement d’un appel au suivant.
  • Trace : une ligne par appel, avec l’argument réduit, jusqu’au cas d’arrêt ; puis remonter en calculant chaque valeur retournée à partir de celle de la ligne du dessous.
  • Rôle : comparer les résultats aux arguments (66 = 6 × 11) et l’énoncer en une phrase — ce que la fonction calcule, pas la paraphrase de ses lignes.
  • Version itérative : la grandeur qui décroît devient la condition du Tant que ; ce que faisait la remontée (doubler, ajouter, concaténer) passe dans le corps de la boucle, avec un accumulateur initialisé à la valeur du cas d’arrêt.
Les pièges à vérifier dans ta démarche

Répondre « Retourner 0 » à la question de la condition d’arrêt ; donner la valeur finale sans la liste des appels ; calculer à la descente ce qui ne se calcule qu’à la remontée (r n’est connu qu’au retour de l’appel du dessous) ; annoncer une puissance xyx^y parce que le code double une valeur ; dans la version itérative, oublier de doubler x à chaque tour ou initialiser p à 1. Remplacer r par deux appels, Inconnue(x, y Div 2) + Inconnue(x, y Div 2), laisse le résultat juste mais fait exploser le nombre d’appels : 31 au lieu de 5 pour y = 8.

Sujet principal

Exercice 1 (4 points) — dans l’esprit des principales 2018, 2022 et 2026 et du contrôle 2019, section Sciences de l’informatique

7 questionsCorrigé masqué

Soit l’algorithme de la fonction récursive Inconnue suivant, dont le type de retour n’est pas précisé :

Fonction Inconnue (x, y : Entier) : ……………
DEBUT
  Si y = 0 Alors
    Retourner 0
  Sinon
    r ← Inconnue(x, y Div 2)
    Si y Mod 2 = 0 Alors
      Retourner r + r
    Sinon
      Retourner r + r + x
    FinSi
  FinSi
FIN

NB : x et y sont deux entiers positifs ou nuls.

Travail demandé :

  1. Réécrire l’entête de la fonction Inconnue en complétant son type de retour. Justifier.
  2. La condition d’arrêt du traitement récursif est : a) Retourner 0 — b) y = 0 — c) y Mod 2 = 0. Choisir la bonne réponse et justifier ce choix.
  3. Justifier que, pour tout entier y positif ou nul, les appels récursifs successifs finissent par vérifier la condition d’arrêt.
  4. Donner la trace d’exécution de la fonction Inconnue — appels successifs, puis valeurs retournées en remontant — pour chacun des deux cas suivants :
    1. Cas 1 : x = 6 et y = 11.
    2. Cas 2 : x = 15 et y = 8.
  5. Dresser le tableau de déclaration des objets locaux de la fonction Inconnue.
  6. En déduire le rôle de la fonction Inconnue.
  7. Écrire l’algorithme d’une fonction itérative Produit(x, y) qui retourne le même résultat que Inconnue(x, y) sans aucun appel récursif, en n’utilisant, comme Inconnue, que des additions et les opérations Div 2 et Mod 2. Dresser son tableau de déclaration des objets locaux.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : le type de retour se lit sur ce que retournent toutes les branches, pas sur le nom de la fonction. Inconnue retourne soit 0, soit r + r, soit r + r + x, où x est un entier et où r reçoit lui-même un résultat de Inconnue : ce sont toujours des entiers, le type de retour est Entier\boxed{\text{Entier}}. Entête complété :

Fonction Inconnue (x, y : Entier) : Entier

2. Réponse b). y = 0 est le test qui arrête les appels : quand il est vrai, la fonction retourne 0 sans s’appeler elle-même. Retourner 0 est le traitement du cas d’arrêt, pas la condition ; y Mod 2 = 0 choisit seulement la formule appliquée après le retour de l’appel récursif.

3. Idée : nommer la grandeur qui décroît. Chaque appel récursif porte sur y Div 2. Pour y ≥ 1, on a 0 ≤ y Div 2 ≤ y / 2 < y : y reste un entier positif ou nul et diminue strictement d’un appel au suivant, il atteint donc 0 après un nombre fini d’appels. Pour y = 11 : 11 → 5 → 2 → 1 → 0, soit 5 appels, cas d’arrêt compris.

4.a Idée : descendre jusqu’au cas d’arrêt en notant la parité de y, puis remonter — chaque appel attend r, la valeur retournée par l’appel de la ligne du dessous. Cas 1 (x = 6, y = 11) : les appels se lisent de haut en bas, les valeurs se calculent de bas en haut.

Appely Mod 2r reçuValeur retournée
Inconnue(6, 11)13030 + 30 + 6 = 66
Inconnue(6, 5)11212 + 12 + 6 = 30
Inconnue(6, 2)066 + 6 = 12
Inconnue(6, 1)100 + 0 + 6 = 6
Inconnue(6, 0)——0 (cas d’arrêt)

On retourne donc 66\boxed{66} pour l’appel Inconnue(6, 11).

4.b Cas 2 (x = 15, y = 8) : y = 8, 4 et 2 sont pairs, seul y = 1 est impair.

Appely Mod 2r reçuValeur retournée
Inconnue(15, 8)06060 + 60 = 120
Inconnue(15, 4)03030 + 30 = 60
Inconnue(15, 2)01515 + 15 = 30
Inconnue(15, 1)100 + 0 + 15 = 15
Inconnue(15, 0)——0 (cas d’arrêt)

On retourne 120\boxed{120} pour l’appel Inconnue(15, 8).

5. Tableau de déclaration des objets locaux de Inconnue :

ObjetType/NatureRôle
rEntierRésultat de l’appel récursif Inconnue(x, y Div 2)

x et y sont les paramètres formels, déjà déclarés dans l’entête : ils ne figurent pas dans ce tableau.

6. Idée : comparer les résultats aux arguments. 66 = 6 × 11 et 120 = 15 × 8 : la fonction Inconnue permet de calculer le produit x × y par doublements successifs. En écrivant y = 2q + b, avec q = y Div 2 et b = y Mod 2, on a x × y = 2 × (x × q) + b × x : r vaut x × q, la fonction le double (r + r) et ajoute x lorsque y est impair. Chaque x ajouté est ensuite doublé par tous les appels du dessus, d’où, pour y = 11 : 6 × 11 = 6 × 8 + 6 × 2 + 6 × 1.

7. Idée : la boucle Tant que remplace les appels — même grandeur décroissante y, même arrêt quand y vaut 0. Comme il n’y a plus de remontée pour doubler le résultat, on double x à chaque tour et on accumule les x retenus dans p, initialisé à la valeur du cas d’arrêt, 0.

Fonction Produit (x, y : Entier) : Entier
DEBUT
  p ← 0
  Tant que y > 0 Faire
    Si y Mod 2 = 1 Alors
      p ← p + x
    FinSi
    x ← x + x
    y ← y Div 2
  Fin Tant que
  Retourner p
FIN
ObjetType/NatureRôle
pEntierProduit partiel accumulé

Contrôle sur x = 6 et y = 11, une ligne par tour de boucle :

Toury Mod 2pxy
départ—0611
116125
2118242
3018481
4166960

La boucle s’arrête sur y = 0 avec p = 66, la valeur de Inconnue(6, 11). x et y étant passés par valeur, les modifier dans Produit ne change pas les objets du programme appelant.

Changer d’énoncé, garder le raisonnement

Choisis un seul transfert après le sujet principal. Qu’est-ce qui change ? Quel résultat ou quelle méthode peux-tu réutiliser ? Les autres exercices restent disponibles pour une prochaine séance.

Variantes rencontrées (section Sciences de l’informatique) : produit par doublements — a doublé et b divisé par 2 quand b est pair, a ajouté et b diminué de 1 quand b est impair —, résultats pour deux couples puis rôle, enchaînés avec une procédure de remplissage d’un fichier d’enregistrements à corriger (principale 2026) ; exponentiation rapide F(a, n) définie par cas : traces pour deux couples, rôle aⁿ, puis algorithme récursif à écrire (contrôle 2017) ; primalité Inconnue(E, k) à valeurs booléennes, quatre appels puis rôle, réemployée dans une fonction d’approximation (principale 2018) ; recherche dichotomique déguisée en Quoi(T, a, deb, fin), type de retour à donner (contrôle 2019) ; maximum de deux réels par inversion des arguments, en QCM : type, condition d’arrêt, valeur, rôle (principale 2019) ; somme des chiffres d’une chaîne, entête et objets locaux à compléter (principale 2022) ; suppression récursive des occurrences d’un caractère, type Chaîne, trace puis deux fonctions à écrire (contrôle 2026). Les séries des enseignants posent « Compléter le type de cette fonction » puis « Ecrire cette fonction avec une version itérative ». Cette trajectoire n’a pas été posée dans l’épreuve commune des sections Mathématiques, Sciences expérimentales et Sciences techniques.

Exercices d'entraînement — une nuance à la fois

1 Drill RV-C.1 — type de retour Chaîne : la chaîne raccourcit à chaque appel, la concaténation se fait à la remontée
Entraînement 01 / 04

Drill RV-C.1 — type de retour Chaîne : la chaîne raccourcit à chaque appel, la concaténation se fait à la remontée

5 questionsCorrigé masqué

Soit l’algorithme de la fonction récursive Quoi suivant. Effacer(ch, d, f) retourne la chaîne ch privée de ses caractères de rang d inclus à f exclu (les rangs commencent à 0), sans modifier ch ; le signe + concatène.

Fonction Quoi (ch : Chaîne) : ……………
DEBUT
  Si Long(ch) ≤ 1 Alors
    Retourner ch
  Sinon
    s ← Effacer(ch, 0, 1)
    Si ch[0] = ch[1] Alors
      Retourner Quoi(s)
    Sinon
      Retourner ch[0] + Quoi(s)
    FinSi
  FinSi
FIN
  1. Quel est le type du résultat de la fonction Quoi ? Justifier.
  2. Quelle est la condition d’arrêt du traitement récursif ? Que retournent Quoi("") et Quoi("aaaa") ?
  3. Donner la trace d’exécution de la fonction Quoi pour l’appel Quoi("Appelle") : appels successifs, puis chaînes retournées en remontant.
  4. En déduire le rôle de la fonction Quoi. Que retourne Quoi("Mississippi") ?
  5. Écrire l’algorithme d’une fonction récursive NbDoubles(ch) qui retourne le nombre de rangs i, avec 0 ≤ i < Long(ch) − 1, tels que ch[i] = ch[i + 1]. Exemples : NbDoubles("Appelle") retourne 2 et NbDoubles("Mississippi") retourne 3.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : regarder les trois instructions Retourner. Le cas d’arrêt retourne ch, une chaîne ; la deuxième branche retourne directement le résultat d’un appel de Quoi, la troisième concatène le caractère ch[0] à ce résultat : le résultat est de type Chaıˆne de caracteˋres\boxed{\text{Chaîne de caractères}}, même lorsqu’il ne contient qu’un caractère.

Fonction Quoi (ch : Chaîne) : Chaîne

2. La condition d’arrêt est le test Long(ch) ≤ 1 : une chaîne vide ou d’un seul caractère est retournée telle quelle. Quoi("") retourne "" dès l’appel initial. Pour "aaaa", chaque caractère égal à son voisin est effacé sans être gardé : "aaaa" → "aaa" → "aa" → "a", et l’on retourne "a".

3. Idée : chaque appel efface un seul caractère, donc la longueur diminue de 1 ; le caractère gardé n’est ajouté qu’au retour de l’appel suivant.

Appelch[0] = ch[1] ?InstructionChaîne retournée
Quoi("Appelle")non"A" + Quoi("ppelle")"Apele"
Quoi("ppelle")ouiQuoi("pelle")"pele"
Quoi("pelle")non"p" + Quoi("elle")"pele"
Quoi("elle")non"e" + Quoi("lle")"ele"
Quoi("lle")ouiQuoi("le")"le"
Quoi("le")non"l" + Quoi("e")"le"
Quoi("e")— (Long = 1)cas d’arrêt"e"

On retourne "Apele", après 7 appels : un par caractère de "Appelle".

4. La fonction Quoi retourne la chaîne ch dans laquelle chaque groupe de caractères identiques consécutifs est réduit à un seul caractère ; Quoi("Mississippi") retourne "Misisipi". La comparaison distingue majuscules et minuscules : Quoi("Aa") retourne "Aa".

5. Idée : même parcours et même condition d’arrêt que Quoi ; on remplace la concaténation par un comptage.

Fonction NbDoubles (ch : Chaîne) : Entier
DEBUT
  Si Long(ch) ≤ 1 Alors
    Retourner 0
  Sinon
    s ← Effacer(ch, 0, 1)
    Si ch[0] = ch[1] Alors
      Retourner 1 + NbDoubles(s)
    Sinon
      Retourner NbDoubles(s)
    FinSi
  FinSi
FIN

Objet local : s, de type Chaîne, ch privée de son caractère de rang 0. "Appelle" contient les doublons pp et ll (2) ; "Mississippi" contient ss, ss et pp (3). On vérifie que la longueur de Quoi(ch) vaut Long(ch) − NbDoubles(ch) : 7 − 2 = 5 caractères pour "Apele", 11 − 3 = 8 pour "Misisipi".

2 Drill RV-C.2 — QCM sur une fonction à un seul appel récursif : type, condition d’arrêt, valeur, nombre d’appels, rôle
Entraînement 02 / 04

Drill RV-C.2 — QCM sur une fonction à un seul appel récursif : type, condition d’arrêt, valeur, nombre d’appels, rôle

5 questionsCorrigé masqué

Soit l’algorithme de la fonction récursive Quoi suivant :

Fonction Quoi (a, b : Réel) : ……………
DEBUT
  Si a ≤ b Alors
    Retourner b - a
  Sinon
    Retourner Quoi(b, a)
  FinSi
FIN

Reproduire le tableau suivant puis, pour chacune des propositions ci-après, remplir la case correspondante par la lettre de la réponse correcte.

Proposition12345
Réponse
  1. Le type de la fonction Quoi peut être : a) Entier — b) Réel — c) Booléen.
  2. La condition d’arrêt du traitement récursif est : a) Retourner b - a — b) a ≤ b — c) Retourner Quoi(b, a).
  3. Pour a = 13 et b = 4, le résultat retourné par la fonction Quoi est égal à : a) −9 — b) 17 — c) 9.
  4. Pour deux réels a et b quelconques, le nombre d’appels de Quoi, appel initial compris, est : a) au plus 2 — b) égal à la partie entière de |a − b|, plus 1 — c) illimité lorsque a > b.
  5. Le rôle de la fonction Quoi est de : a) calculer la somme de a et b — b) calculer la distance |a − b| entre a et b — c) retourner le plus grand des deux réels.
Voir la correction commentéeAprès avoir posé votre démarche
Proposition12345
Réponsebbcab

1. b) Réel — la fonction retourne b − a, différence de deux paramètres réels : le résultat est un Réel. Il n’y a ni Vrai ni Faux (pas Booléen), et un Entier ne pourrait pas contenir le résultat 2,5 obtenu pour a = 4,5 et b = 2.

2. b) a ≤ b — c’est le test qui met fin aux appels. Retourner b - a est le traitement exécuté quand il est vrai ; Retourner Quoi(b, a) est l’appel récursif.

3. c) 9 — Quoi(13, 4) : 13 ≤ 4 est faux, appel Quoi(4, 13) ; 4 ≤ 13 est vrai, on retourne 13 − 4 = 9\boxed{9}.

4. a) au plus 2 — Idée : ici ce n’est pas une taille qui décroît, c’est l’ordre des arguments que l’appel rétablit. Si a ≤ b, un seul appel. Sinon b < a, et l’appel Quoi(b, a) reçoit un premier argument inférieur au second : son test est vrai, il s’arrête. Deux appels au maximum, quelle que soit la distance entre a et b.

5. b) — si a ≤ b, on retourne b − a ≥ 0 ; sinon l’appel retourne a − b > 0. Dans les deux cas, c’est la distance |a − b| : Quoi(13, 4) et Quoi(4, 13) retournent 9 tous les deux. La réponse c) serait juste si la branche d’arrêt retournait b au lieu de b − a.

3 Drill RV-C.3 — paramètre compteur qui avance à chaque appel : quatre valeurs, rôle, puis réemploi dans une fonction booléenne
Entraînement 03 / 04

Drill RV-C.3 — paramètre compteur qui avance à chaque appel : quatre valeurs, rôle, puis réemploi dans une fonction booléenne

5 questionsCorrigé masqué

Soit l’algorithme de la fonction récursive Quoi suivant, où n est un entier supérieur ou égal à 2 ; l’appel initial se fait toujours avec k = 2.

Fonction Quoi (n, k : Entier) : ……………
DEBUT
  Si n Mod k = 0 Alors
    Retourner k
  Sinon Si k * k > n Alors
    Retourner n
  Sinon
    Retourner Quoi(n, k + 1)
  FinSi
FIN
  1. Compléter l’entête de la fonction Quoi par son type de retour.
  2. Déterminer la valeur retournée par la fonction Quoi pour chacun des quatre appels suivants : Quoi(35, 2) ; Quoi(29, 2) ; Quoi(49, 2) ; Quoi(2, 2).
  3. Déduire le rôle de cette fonction.
  4. Pourquoi la fonction peut-elle retourner n dès que k × k > n, sans essayer les valeurs de k suivantes ?
  5. En faisant appel à la fonction Quoi, écrire l’algorithme d’une fonction booléenne Premier(n) qui retourne Vrai si l’entier n (n ≥ 2) est premier, Faux sinon.
Voir la correction commentéeAprès avoir posé votre démarche

1. La fonction retourne k ou n, deux entiers : Fonction Quoi (n, k : Entier) : Entier. Le type n’est pas Booléen : c’est la fonction de la question 5 qui répondra par Vrai ou Faux.

2. Idée : à chaque appel, tester d’abord n Mod k, puis k × k > n ; sinon recommencer avec k + 1.

Appel initialValeurs de k essayéesTest qui arrêteValeur retournée
Quoi(35, 2)2, 3, 4, 535 Mod 5 = 05
Quoi(29, 2)2, 3, 4, 5, 66 × 6 = 36 > 2929
Quoi(49, 2)2, 3, 4, 5, 6, 749 Mod 7 = 07
Quoi(2, 2)22 Mod 2 = 02

Détail pour 35 : 35 Mod 2 = 1 et 4 ≤ 35, puis 35 Mod 3 = 2 et 9 ≤ 35, puis 35 Mod 4 = 3 et 16 ≤ 35, enfin 35 Mod 5 = 0 : on retourne 5\boxed{5}. Pour 29, les restes par 2, 3, 4, 5 sont 1, 2, 1, 4 avec k × k ≤ 29, puis 29 Mod 6 = 5 et 36 > 29 : on retourne 29\boxed{29}.

3. La fonction Quoi(n, 2) retourne le plus petit diviseur de n supérieur ou égal à 2 : 5 pour 35, 7 pour 49, et n lui-même quand n n’a pas d’autre diviseur que 1 et n (29, 2). Ce plus petit diviseur est toujours un nombre premier.

4. Idée : un diviseur « petit » existe toujours quand n n’est pas premier. Si n = a × b avec 2 ≤ a ≤ b, alors a × a ≤ a × b = n. Quand k × k > n, toutes les valeurs de 2 à k ont déjà été essayées sans trouver de diviseur ; or un diviseur a ≥ 2 tel que a × a ≤ n vérifierait a × a < k × k, donc a < k, et il aurait déjà été trouvé : n n’a pas d’autre diviseur que 1 et n, et le plus petit à partir de 2 est n.

5. Idée : n est premier exactement quand son plus petit diviseur à partir de 2 est n.

Fonction Premier (n : Entier) : Booléen
DEBUT
  Retourner Quoi(n, 2) = n
FIN
ObjetType/NatureRôle
QuoiFonctionPlus petit diviseur de n à partir de 2

Premier(29) retourne Vrai, Premier(35) retourne Faux (5 ≠ 35), Premier(2) retourne Vrai. La condition n ≥ 2 est indispensable : Quoi(1, 2) retourne 1 (1 Mod 2 = 1 et 4 > 1), si bien que Premier(1) vaudrait Vrai à tort.

4 Drill RV-C.4 — entête et objets locaux à compléter : un nombre reconstruit à la remontée à partir des chiffres d’une chaîne
Entraînement 04 / 04

Drill RV-C.4 — entête et objets locaux à compléter : un nombre reconstruit à la remontée à partir des chiffres d’une chaîne

5 questionsCorrigé masqué

Soit l’algorithme de la fonction récursive Inconnu suivant. Sous_chaine(ch, d, f) retourne la partie de ch allant du rang d inclus au rang f exclu (les rangs commencent à 0) et Valeur(c) retourne l’entier représenté par le chiffre c.

Fonction Inconnu (……………) : ……………
DEBUT
  Si Long(ch) = 0 Alors
    Retourner 0
  Sinon
    n ← Long(ch)
    c ← ch[n - 1]
    s ← Sous_chaine(ch, 0, n - 1)
    Si c ∈ ["0".."9"] Alors
      Retourner 10 * Inconnu(s) + Valeur(c)
    Sinon
      Retourner Inconnu(s)
    FinSi
  FinSi
FIN
  1. Réécrire l’entête de la fonction Inconnu en complétant la déclaration des paramètres et le type de retour.
  2. Dresser le tableau de déclaration des objets locaux de la fonction Inconnu.
  3. Quel est le résultat retourné par la fonction Inconnu pour ch = "R2d0v26" ? Donner les appels successifs et les valeurs retournées en remontant.
  4. Déduire le rôle de la fonction Inconnu.
  5. Que retournent Inconnu("Bac") et Inconnu("x07") ? Que montrent ces deux résultats sur les limites de ce rôle ?
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : le seul objet utilisé sans jamais être affecté est ch, manipulé par Long, par ses rangs et par Sous_chaine ; les retours sont 0 ou 10 × (un entier) + Valeur(c).

Fonction Inconnu (ch : Chaîne) : Entier

2. Tableau de déclaration des objets locaux :

ObjetType/NatureRôle
nEntierLongueur de ch
cCaractèreDernier caractère de ch
sChaînech privée de son dernier caractère

3. Idée : chaque appel retire le dernier caractère ; la multiplication par 10 ne peut se faire qu’au retour de l’appel suivant.

AppelcInstructionValeur retournée
Inconnu("R2d0v26")"6"10 × Inconnu("R2d0v2") + 62026
Inconnu("R2d0v2")"2"10 × Inconnu("R2d0v") + 2202
Inconnu("R2d0v")"v"Inconnu("R2d0")20
Inconnu("R2d0")"0"10 × Inconnu("R2d") + 020
Inconnu("R2d")"d"Inconnu("R2")2
Inconnu("R2")"2"10 × Inconnu("R") + 22
Inconnu("R")"R"Inconnu("")0
Inconnu("")—cas d’arrêt0

On retourne 2026\boxed{2026}.

4. La fonction Inconnu retourne l’entier formé par les chiffres de ch, pris dans leur ordre, les autres caractères étant ignorés : chaque appel place le dernier chiffre en unités après avoir multiplié par 10 le nombre formé par les chiffres qui le précèdent.

5. Inconnu("Bac") retourne 0 : aucun caractère n’est un chiffre, tous les appels retournent Inconnu(s) jusqu’à la chaîne vide. Inconnu("x07") retourne 7 : en remontant, "" et "x" donnent 0, "x0" donne 10 × 0 + 0 = 0, puis "x07" donne 10 × 0 + 7 = 7. Le résultat ne distingue donc pas une chaîne sans chiffre d’une chaîne dont les chiffres sont des zéros, et les zéros de tête sont perdus.

Relier ce raisonnement au bac

Choisis une filière pour voir les sujets qui étayent ce scénario.