Adloun

Convertir une récursion en boucle

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 6 — Fonctions récursives

Énoncé

Proposer une version récursive de nb_chiffres(n) (calcul du nombre de chiffres d'un entier ), puis, à l'inverse, convertir la fonction récursive somme_chiffres(n) (somme des chiffres de ) en version itérative à l'aide d'une boucle.

Corrigé

def nb_chiffres(n: int) -> int:
    if n < 10:
        return 1
    return 1 + nb_chiffres(n // 10)

def somme_chiffres(n: int) -> int:
    s = 0
    temp = n
    while temp > 0:
        s += temp % 10
        temp //= 10
    return s if n > 0 else 0

Ces fonctions sont de nature récursive terminale (un seul appel de fonction en fin de parcours). La conversion en boucle est triviale et élimine tout risque de débordement de pile (RecursionError), ce qui s'avère indispensable en présence de très grandes valeurs de .

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.