Études de fonctions
Exercice 1¶
On définit la fonction f
par le code python donné ci-dessous.
1 2 3 4 5 6 7 8 |
|
-
Sans exécuter le code, indiquer ce que renvoient
f(5, 15)
etf(8, 20)
. -
Indiquer plus généralement ce que calcule
f(x, y)
en fonction des paramètres \(x\) et \(y\).
Exercice 2¶
Expliquer pourquoi le code python ci-dessous, censé calculer la factorielle, est incorrect. En proposer une correction.
1 2 3 4 5 6 |
|
Exercice 3¶
- On considère la fonction
f
définie par le code python suivant :
1 2 3 4 5 6 7 |
|
Déterminer l'affichage réalisé lorsque l'on exécute l'instruction
f(3)
.
- On considère la fonction
g
définie par le code python suivant :
1 2 3 4 5 6 7 |
|
Déterminer l'affichage réalisé lorsque l'on exécute l'instruction
g(3)
.
Exercice 4¶
On considère la fonction f
suivante :
1 2 3 4 5 6 7 8 9 10 |
|
-
Déterminer ce qui sera affiché à l'écran lors de l'exécution de l'instruction
f(4)
. Combien d'appels récursifs ont été réalisés ? -
Expliquer ce que la fonction calcule en fonction du paramètre \(n\). Exprimer le nombre d'appels récursifs réalisés en fonction de \(n\).
Exercice 5¶
On considère la fonction f
suivante :
1 2 3 4 5 6 7 8 9 10 |
|
-
Déterminer ce qui sera affiché à l'écran lors de l'exécution de l'instruction
f(3)
. Combien d'appels récursifs ont été réalisés ? -
Expliquer ce que la fonction calcule en fonction du paramètre \(n\). Exprimer le nombre d'appels récursifs réalisés en fonction de \(n\).
-
Proposer une modification de la fonction
f
afin que l'instructionf(n)
réalise un nombre d'appel récursifs proportionnel àn
.
Exercice 6¶
-
Soient \(x\) et \(n\) deux nombres entiers. On note
pow(x, n)
le nombre \(x^n\).-
Pour quelle valeur de \(n\) le nombre
pow(x, n)
est-il indépendant de \(x\) ? -
Exprimer
pow(x, n)
en fonction depow(x, n-1)
. Expliquer votre réponse. -
En déduire le code d'une fonction récursive
pow
qui étant donné deux nombres entiers \(x\) et \(n\) renvoie \(x^n\). -
Exprimer le nombre d'appels récursifs réalisés par l'exécution de l'instruction
pow(x, n)
en fonction de \(n\).
-
-
On donne le code de la fonction
pow_fast
:
1 2 3 4 5 6 7 8 9 10 11 |
|
-
Dresser l'arbre d'appel de l'instruction
pow_fast(3, 19)
.1 2 3 4
def test(): print("heyl") test()
heyl
-
Exprimer le nombre d'appels récursifs réalisés par l'exécution de l'instruction
pow(x, n)
en fonction de \(n\).
Exercice 7¶
On suppose implémentée la fonction autre(c1, c2)
, qui prend en
argument deux caractères différents c1
et c2
parmi "A"
, "B"
et
"C"
, et qui renvoie le caractère différent de c1
et de c2
.
-
Compléter la fonction
hanoi
ci-dessous pour que celle-ci affiche la liste des déplacements à effectuer pour résoudre le problème de Hanoï de difficultén
.1 2 3 4 5 6 7 8
def hanoi(n, depart, arrivee): """ int, str, str -> None """ if n == 0: pass else: autre_pilier = autre(depart, arrivee) # À compléter # ...
-
-
Écrire sur votre feuille l'arbre d'appel de l'instruction
hanoi(4)
. -
Combien d'appels récursifs réalise-t-on pour résoudre le problème de Hanoï de difficulté 4 ?
-
Conjecturer le nombre d'appels nécessaires pour résoudre le problème de Hanoï de difficulté \(n\).
-
On suppose que l'on peut effectuer un déplacement en une seconde. Combien de temps met cet algorithme pour résoudre le problème de difficulté 64 ?
-
Exercice 8¶
On définit la suite de Syracuse \((u_n)\) de la manière suivante :
-
le premier terme \(u_0\) est un entier strictement positif ;
-
pour tout \(n \geq 1\) :
-
si \(u_{n - 1}\) est pair, alors \(u_n = u_{n - 1}/2\),
-
sinon \(u_n = 3u_n + 1\).
-
On se propose d'étudier la suite de syracuse dans les questions suivantes.
-
Soit \(u_0 = 10\). Calculer \(u_1, \ldots, u_7\). Que constate-t-on ?
-
Définir une fonction python récursive
u
qui prend en entrée deux paramètres \(u_0\) et \(n\) et qui renvoie \(u_n\). -
La conjecture de Syracuse affirme que pour tout entier \(u_0\) il existe un entier \(n\) tel que \(u_n = 1\).
-
Vérifier que cette conjecture est vraie pour les nombres \(0 < u_0 \leq 10\).
-
On appelle temps de vol du nombre \(u_0\) le premier indice \(n\) tel que \(u_n = 1\). Sans utiliser de boucle
while
, écrire une fonction python récursivetemps_vol
qui prend en entrée un nombre positif \(u_0\) et qui détermine le temps de vol de la suite de Syracuse de premier terme \(u_0\). -
Écrire une fonction python qui renvoie la liste des temps de vol des entiers compris entre 1 et 100.
-