Exercice python factorielle

Discutez d'informatique ici !
Abilys38
Membre Relatif
Messages: 308
Enregistré le: 04 Jan 2008, 19:17

Exercice python factorielle

par Abilys38 » 04 Sep 2017, 16:56

Bonjour,

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à).
Fichiers joints
lll.jpg
lll.jpg (28.69 Kio) Vu 356 fois



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 5808
Enregistré le: 22 Nov 2007, 13:00

Re: Exercice python factorielle

par fatal_error » 04 Sep 2017, 17:05

dapres wiki un invariant de boucle est une prop vraie apres chaque iter.
a priori il sagit de dire que g(ieme iteration) = g(i-1 iter)*i où g retourne la valeur de la variable f.

(ce qui est faux a partir dun certain rang soit dit en passant)

puis de conclure que ca donne 1*...*n qui est la def de la factorielle
la vie est une fête :)

Abilys38
Membre Relatif
Messages: 308
Enregistré le: 04 Jan 2008, 19:17

Re: Exercice python factorielle

par Abilys38 » 04 Sep 2017, 17:15

Merci pour votre réponse.

Que proposez vous?

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite