Aller au contenu

Somme des premiers entiers⚓︎

On veut créer une fonction somme qui renvoie la somme des entiers de 1 à n inclus.

  • n est un entier
  • Exemples :
    • \(1+2+3+4 = 10\), donc somme(4) renvoie 10.
    • \(1+2+3+4+5 = 15\), donc somme(5) renvoie 15.

On pourra constater que

  • somme(5) est égal à 5 + somme(4).
  • De manière générale, pour n > 0, somme(n) est égal à n + somme(n - 1).
  • Pour n = 0, la somme est vide, donc vaut 0. Comme pour tout n < 0.
🐍 Console Python
>>> somme(0)
0
>>> somme(1)
1
>>> somme(2)
3
>>> somme(3)
6
>>> somme(4)
10

Voici plusieurs versions, à vous de dire, pour chacune, si elle est itérative ou récursive, correcte ou fausse.

🐍 Script Python
def somme(n):
    for i in range(n):
        total += i
    return total
Réponse

Il y a deux erreurs dans cette version itérative :

  1. il faut initialiser total à 0 avant la boucle ;
  2. l'entier n n'est pas ajouté, pour corriger :
    • soit on fait un tour de boucle en plus,
    • soit on ajoute i + 1 à chaque tour au lieu de i,
    • soit, mieux, on fait une boucle de 1 inclus à n + 1 exclu.
🐍 Script Python
def somme(n):
    print(n + somme(n - 1))
Réponse

Il y a deux erreurs dans cette version récursive :

  1. il faut une structure conditionnelle pour renvoyer 0 si n est négatif ;
  2. il faut renvoyer le résultat et non l'afficher.
🐍 Script Python
def somme(n):
    return n * (n + 1) / 2
Réponse

Il y a deux erreurs dans cette version avec une formule :

  1. il faut une structure conditionnelle pour renvoyer 0 si n est négatif ;
  2. le résultat sera ici un flottant, si n est gigantesque le résultat sera arrondi ; il faut utiliser une division entière avec // 2

Remarque : cette formule est au programme de la spécialité mathématiques, en première.

À vous de compléter la fonction ci-dessous pour qu'elle réussisse les tests.

###

def somme(n):bksl-nl ...bksl-nlbksl-nlbksl-nlassert somme(0) == 0bksl-nlassert somme(1) == 1bksl-nlassert somme(3) == 6bksl-nlassert somme(5) == 15bksl-nlbksl-nl

Solution itérative
🐍 Script Python
def somme(n):
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

assert somme(0) == 0
assert somme(1) == 1
assert somme(3) == 6
assert somme(5) == 15
Solution récursive
🐍 Script Python
def somme(n):
    if n <= 0:
        return 0
    else:
        return somme(n - 1) + n


assert somme(0) == 0
assert somme(1) == 1
assert somme(3) == 6
assert somme(5) == 15