Aller au contenu

Somme des chiffres d'un entier⚓︎

On souhaite une version récursive d'une fonction telle que somme_chiffre(n) renvoie la somme des chiffres de l'entier positif n.

Pour cela, on peut remarquer que :

  • si n < 10, alors la réponse est n
  • sinon, la réponse vient de n // 10 et de n % 10

Somme des chiffres de 1984

Si n = 1984, alors somme_chiffre(n) est égale à

somme_chiffre(198) + 4

et on a obtenu

  • 198 ← 1984 // 10
  • 4 ← 1984 % 10

Exercice

Complétez le code ci-dessous, en ajoutant des tests unitaires

###

def sommepy-undchiffres(n):bksl-nl ...bksl-nl bksl-nl bksl-nlassert sommepy-undchiffres(1984) == 1 + 9 + 8 + 4bksl-nlbksl-nl

Réponse
🐍 Script Python
def somme_chiffres(n):
    """Renvoie la somme des chiffres de l'entier positif n"""
    if n < 10:
        return n
    else:
        return somme_chiffres(n // 10) + (n % 10)

Un variante légèrement plus efficace est

🐍 Script Python
def somme_chiffres(n):
    """Renvoie la somme des chiffres de l'entier positif n"""
    if n < 10:
        return n
    else:
        q, r = divmod(n, 10)
        return somme_chiffres(q) + r

En effet, divmod n'effectue qu'une seule division pour renvoyer le quotient et le reste. Dans le code juste avant, il y avait deux divisions pour obtenir le même résultat.