Voici un petit programme pour calculer des factorielles:
- Code: Tout sélectionner
def factorielle(n):
k = 1
f = 1
while k <= n:
f = f * k
k = k + 1
return f
assert factorielle(5) == 5*4*3*2*1
assert factorielle(8) == factorielle(5)*6*7*8
C'est moi qui ai proposé ce jeu de test. Je ne sais pas si c'est le plus adapté.
Voilà les questions pour lesquelles j'ai un doute:
Quel invariant de boucle répondrait à cette question?
Pour moi, le seul invariant de boucle cohérent serait k!
P(0): factorielle(0) = 1 = 0!
P(n): Supposons que factoriel(n) = I! avec I la valeur de k à la fin de la boucle while
factoriel(n+1) = n+1*factorielle(n) = I+1*I! = (I+1)!
Je ne vois pas la réponse de la dernière question (en supposant que j'ai juste pour celle là).