Premiers exercices récursivité
Suites définies par une relation de récurrence¶
Suites géométriques¶
On dit qu'une suite \((u_n)\) est géométrique lorsqu'il existe un nombre réel \(a\) et un nombre réel \(q\) tels que \(u_0 = a\) et que pour tout \(n \geq 1\) on ait \(u_{n} = q\times u_{n - 1}\). On écrit souvent ces informations de la manière suivante :
Écrire le code d'une fonction récursive géométrique
qui prend en
argument un entier n
, deux nombres flottants a
et q
, et qui renvoit
\(u_n\), quand \((u_n)\) est une suite géométrique de raison \(q\) et de
premier terme \(a\).
1 2 3 4 |
|
1 |
|
75
Suite arithmétiques¶
On dit qu'une suite \((u_n)\) est arithmétique lorsqu'il existe un nombre réel \(a\) et un nombre réel \(q\) tels que \(u_0 = a\) et que pour tout \(n \geq 1\) on ait \(u_{n} = q + u_{n - 1}\). On écrit souvent ces informations de la manière suivante :
Écrire le code d'une fonction récursive arithmétique
qui prend en argument un entier n
, deux nombres flottants a
et q
, et qui renvoit \(u_n\), quand \((u_n)\) est une suite arithmétique de raison \(q\) et de premier terme \(a\).
1 2 3 |
|
1 |
|
13
Fonction factorielle¶
Pour tout entier positif ou nul on définit la fonction factorielle de \(n\) de la manière suivante :
- Si \(n = 0\), alors la factorielle de \(n\) vaut 1 ;
- Sinon, la factorielle de \(n\) vaut le produit des \(n\) premiers entiers strictement positifs : \(1 \times 2\times 3 \times \ldots \times n\).
On note \(n!\) le nombre factorielle de \(n\)
Écrire une fonction python récursive factorielle
qui prend en argument un entier positif n
et qui renvoit le nombre \(n!\).
1 2 3 |
|
1 |
|
120
Suite de Fibonnacci¶
La suite doit son nom à Leonardo Fibonacci qui, dans un problème récréatif posé dans l'ouvrage Liber abaci publié en 1202, décrit la croissance d'une population de lapins :
« Quelqu’un a déposé un couple de lapins dans un certain lieu, clos de toutes parts, pour savoir combien de couples seraient issus de cette paire en une année, car il est dans leur nature de générer un autre couple en un seul mois, et qu’ils enfantent dans le second mois après leur naissance. »
On note \(F_n\) le nombre de lapins présents au début du \(n\)-ième mois. Jusqu'à la fin du deuxième mois, les lapins n'ont pas commencé à se reproduire, il y a donc \(F_1 = F_2 = 1\) couple. Lorsque \(n \geq 3\), on admet que le nombre \(F_n\) de couples lors du \(n\)-ième mois est donné par la formule suivante : $$ F_n = F_{n-2} + F_{n - 1} $$
Calculer les 10 premiers nombres de fibonacci.
Écrire une fonction récursive fibonacci
qui prend en argument un entier positif n
et qui calcule le nombre \(F_n\).
1 2 3 4 5 |
|
1 2 |
|
1 1 2 3 5 8 13 21 34
Fonctions récursives¶
Écriture en base 2¶
Encadrements des entiers écrits sur k bits¶
L'objectif de cet exercice est d'écrire une version récursive de la fonction encadre
qui étant donné un nombre entier k
détermine la valeur du plus grand entier \(n\) que l'on puisse écrire en base 2 avec k
bits.
- Pour quelles valeurs de \(k\) est-il facile de calculer
encadre(k)
? - On suppose dans cette question qu'un nombre entier \(n\) s'écrit en base 2 avec \(k\) bits.
-
Quel est le plus grand entier \(n\) que l'on puisse écrire avec \(k - 1\) bits ?
Exprimer \(n\) en fonction de \(k\). 2. Quel est le plus grand entier \(n\) que l'on puisse écrire avec \(k\) bits ?
Exprimer \(n\) en fonction de \(k\). 3. En déduire l'expression de
encadre(k)
en fonction deencadre(k-1)
. 3. En déduire le code d'une fonction récursiveencadre
qui réponde au problème de l'énoncé.
-
1 2 3 |
|
1
3
7
Nombre de bits¶
L'objectif de cet exercice est d'écrire une version récursive de la fonction nombre_bits
qui étant donné un entier n
détermine le nombre k
de bits présents dans l'écriture en base 2 du nombre n
.
- Pour quelle(s) valeur(s) de \(n\) est-il facile de calculer
nombre_bits(n)
? - On suppose dans cette question qu'un nombre entier \(n\) s'écrit en base 2 avec \(k\) bits.
-
Avec combien de bits s'écrit en base 2 le nombre
n//2
?Exprimer la réponse en fonction de \(k\). 2. En déduire l'expression de
nombre_bits(n)
en fonction denombre_bits(n//2)
. 3. En déduire le code d'une fonction récursivenombre_bits
qui réponde au problème de l'énoncé.
-
1 2 3 4 |
|
1 2 3 |
|
1
4
5
Appartient¶
L'objectif de cet exercice est d'écrire une version récursive de la fonction appartient
qui étant donné un tableau (éventuellement vide) tab
d'entiers et entier e
, détermine si l'élément e
est présent dans le tableau tab
.
On commence pour cela par écrire une fonction appartient_aux
qui étant donné un tableau (éventuellement vide) tab
d'entiers, un entier e
et un entier i
détermine si l'élément e
est présent parmi les i
premiers éléments du tableau tab
. Si \(n\) est la taille du tableau tab
, on supposera que \(0 \leq i \leq n\).
- Soient
tab
un tableau ete
un élément.
Que doit renvoyer l'instructionappartient(tab, e, 0)
? - On suppose dans cette questions que \(1 \leq i \leq n\).
- Quel est l'indice du \(i\)-ème élément du tableau
tab
?
Exprimer votre réponse en fonction de \(i\). - Avec quels arguments faut-il appeler la fonction
appartient_aux
pour déterminer si l'élémente
est présent parmi les \(i - 1\) premiers éléments du tableau ? - Décommenter et compléter le code ci-dessous.
- Quel est l'indice du \(i\)-ème élément du tableau
- En déduire le code d'une fonction
appartient
qui détermine si l'élémente
appartient au tableautab
. Vous pourrez faire appel à la fonctionappartient_aux
avec des arguments bien choisis.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 |
|
True
False
Nombre d'occurrences¶
En vous inspirant de l'algorithme de l'exercice précédent, écrire une fonction nombre_occurrences_aux
qui étant donné un tableau (éventuellement vide) tab
d'entiers, un entier e
, et un entier i
détermine le nombre de fois où l'élément e
est apparait parmi les i
premiers éléments du tableau tab
. Si \(n\) est la taille du tableau tab
, on supposera que \(0 \leq i \leq n\).
1 2 3 4 5 |
|
1 2 3 4 |
|
0
1
1
2