Lycée Victor Hugo MP 2016-2017
T.P. no2
Récursivité 1
I Le calcul des coefficients binomiaux
1 Par la formule utilisant des factorielles
Dans ce paragraphe, on utilise la formule explicite donnant le coefficient binomial n
p!à
l’aide de factorielles.
1. Rappeler cette formule.
2. Ecrire le code Python de la fonction factorielle. On utilisera un algorithme récursif.
Quelle est la complexité de cette fonction ?
3. Ecrire le code Python de la fonction binomial qui rend pour résultat le coefficient binomial
du couple de paramètres (n, p)calculé à l’aide de cette formule.
4. Quelle est la complexité de cette fonction ?
5. Tester votre fonction sur 4
2!, 37
2!, 50
25!et 1000
2!. Pour ce dernier calcul, n’est-il pas
plus simple de faire l’opération mentalement (voire de la poser) ?
6. Préciser les limites de ce choix de programmation en le testant si nécessaire encore avec
d’autres exemples.
2 Par la formule de Pascal
Dans ce paragraphe, on utilise la formule de Pascal :
n
p!= n1
p1!+ n1
p!
.
On veut ici écrire une fonction récursive Python nommée binomial2 utilisant cette formule.
On convient de définir n
p!pour tout couple (n, p)N2et notamment n
p!= 0 si p>n.
1. Cette dernière définition est-elle pertinente ?
2. Pour quels couples d’entiers naturels la formule de Pascal n’est-elle pas valable ?
3. Quels couples (n, p)vont ainsi constituer la base de la fonction binomial2 ?
4. Ecrire le code Python de la fonction binomial2. Estimer la complexité de cette fonction ?
5. Tester votre fonction sur 4
2!, 37
2!, 50
25!et 1000
2!.
6. Préciser les limites de ce choix de programmation en le testant si nécessaire encore avec
d’autres exemples.
7. Facultatif Etudier pour nfixé le nombre d’additions effectuées en fonction de p. On pourra
pour cela créer une nouvelle fonction récursive compte qui rend ce nombre d’additions. Pour
quelles valeurs de pce nombre est-il maximal ?
1
Lycée Victor Hugo MP 2016-2017
3 Par une autre formule souvent utile
Dans ce paragraphe, on utilise la formule : n
p!=n
p× n1
p1!.
On veut ici écrire une fonction récursive Python nommée binomial3 utilisant cette formule.
1. Pour quels couples (n, p)est-elle valable ?
2. Quels arguments du couple(n, p)seront successivement appelés ? (On pourra encore utiliser
les tableaux de la question ?? du paragraphe 2).
3. Ecrire le code Python de la fonction binomial3. Quelle est la complexité de cette fonction ?
4. Tester votre fonction sur 4
2!, 37
2!, 50
25!et 1000
2!et conclure.
2
Lycée Victor Hugo MP 2016-2017
II La suite de Syracuse
On a rencontré en cours la suite de Syracuse ; en voici la version «compressée» définie par la
récurrence ci-dessous (où cNest une constante d’initialisation donnée) :
a0=cet nN, an+1 =
an
2si anest pair
3an+ 1
2si anest impair
1 Analyse de la longueur du vol
1. Écrire le code Python d’une fonction récursive vol de paramètre cqui rend la liste des
différentes valeurs de la suite de Syracuse initialisée à c(et arrêtée à 1).
On s’arrête à 1 dans la mesure où à partir de 1, on retrouve la suite [2,1,2,1,...].
Exemple de résultat attendu :
>>> vol (15) :
[15 , 23 , 35 , 53 , 80 , 40 , 20 , 10 , 5 , 8 , 4 , 2 , 1]
2. Écrire le code Python de la fonction longueurDuVol de paramètre c. Elle rendra pour
résultat le plus petit indice nNpour lequel un= 1.
3. Écrire le code Python de la fonction volMaximal de paramètre entier nqui rend le couple
constitué de la valeur c6npour lequel on obtient le vol de longueur maximale, et de la
longueur de ce vol. Exemple de résultat attendu :
>>> vo lMaxi mal (1000)
(871 , 113)
4. Écrire le code Python de la fonction listeDesRecordsVolMaxi de paramètre entier nqui
rend la liste des couples (c, vol)des différents records obtenus lorsqu’on fait varier cde 1
àn. Exemple de résultat attendu :
>>> l is teD esR ec ord sV olM axi (30)
[(1 , 0) , (2 , 1) , (3 , 5) , (6 , 6) , (7, 11) , (9, 13) , (18 , 14) ]
2 Analyse de l’altitude maximale atteinte
1. Écrire le code Python d’une fonction récursive maximumListe dont le paramètre est une
liste d’entiers ou de flottants let qui rend le maximum des éléments de cette liste.
2. Écrire le code Python de la fonction altitudeMax1Vol de paramètre entier cqui rend
l’altitude maximale atteinte pour un vol initialisé à c. Exemple de résultat attendu :
>>> a lti tude Max 1Vo l (9663)
13557212
3. Écrire le code Python de la fonction altitudeMaxVols de paramètre entier net qui rend
pour résultat le couple (c, alt)cla valeur du paramètre donnant l’altitude maximale
alt atteinte parmi tous les vols obtenus en faisant varier cde 1àn..
>>> a lti tude Max Vol s (1000)
(703 , 125252 )
3
Lycée Victor Hugo MP 2016-2017
4. Écrire le code Python de la fonction listeDesRecordsAltitudeMaxi de paramètre entier
nqui rend la liste des couples (c, alt)des records d’altitude obtenus en faisant varier cde
1àn.
>>> listeDesRecordsAltitudeMaxi(100)
[(1 , 1) , (2 , 2) , (3 , 8) , (7 , 26) , (15 , 80) , (27 , 4616) ]
5. Atteindre une altitude maximale garantit-il un vol de longueur maximale ?
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !