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)
renvoie10
. - \(1+2+3+4+5 = 15\), donc
somme(5)
renvoie15
.
- \(1+2+3+4 = 10\), donc
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 vaut0
. Comme pour toutn < 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 :
- il faut initialiser
total
à0
avant la boucle ; - 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 dei
, - 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 :
- il faut une structure conditionnelle pour renvoyer
0
sin
est négatif ; - 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 :
- il faut une structure conditionnelle pour renvoyer
0
sin
est négatif ; - 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